// Copyright 2015, 2016 Ethcore (UK) Ltd. // This file is part of Parity. // Parity is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // Parity is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with Parity. If not, see . import React, { Component, PropTypes } from 'react'; import ContentClear from 'material-ui/svg-icons/content/clear'; import CheckIcon from 'material-ui/svg-icons/navigation/check'; import DeleteIcon from 'material-ui/svg-icons/action/delete'; import { List, ListItem, makeSelectable } from 'material-ui/List'; import { Subheader, IconButton, Tabs, Tab } from 'material-ui'; import moment from 'moment'; import { Button, Modal, Editor } from '../../ui'; import styles from './loadContract.css'; const SelectableList = makeSelectable(List); const SELECTED_STYLE = { backgroundColor: 'rgba(255, 255, 255, 0.1)' }; export default class LoadContract extends Component { static propTypes = { onClose: PropTypes.func.isRequired, onLoad: PropTypes.func.isRequired, onDelete: PropTypes.func.isRequired, contracts: PropTypes.object.isRequired, snippets: PropTypes.object.isRequired }; state = { selected: -1, deleteRequest: false, deleteId: -1 }; render () { const { deleteRequest } = this.state; const title = deleteRequest ? 'confirm removal' : 'view contracts'; return ( { this.renderBody() } ); } renderBody () { if (this.state.deleteRequest) { return this.renderConfirmRemoval(); } const { contracts, snippets } = this.props; const contractsTab = Object.keys(contracts).length === 0 ? null : ( { this.renderEditor() } Saved Contracts { this.renderContracts(contracts) } ); return (
{ contractsTab } { this.renderEditor() } Contract Snippets { this.renderContracts(snippets, false) }
); } renderConfirmRemoval () { const { deleteId } = this.state; const { name, timestamp, sourcecode } = this.props.contracts[deleteId]; return (

Are you sure you want to remove the following contract from your saved contracts?

); } renderEditor () { const { contracts, snippets } = this.props; const { selected } = this.state; const mergedContracts = Object.assign({}, contracts, snippets); if (selected === -1 || !mergedContracts[selected]) { return null; } const { sourcecode, name } = mergedContracts[selected]; return (

{ name }

); } renderContracts (contracts, removable = true) { const { selected } = this.state; return Object .values(contracts) .map((contract) => { const { id, name, timestamp, description } = contract; const onDelete = () => this.onDeleteRequest(id); const secondaryText = description || `Saved ${moment(timestamp).fromNow()}`; const remove = removable ? ( ) : null; return ( ); }); } renderDialogActions () { const { deleteRequest } = this.state; if (deleteRequest) { return [