// Copyright 2015-2017 Parity Technologies (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 { Subheader, IconButton, Tabs, Tab } from 'material-ui'; import { List, ListItem, makeSelectable } from 'material-ui/List'; import moment from 'moment'; import React, { Component, PropTypes } from 'react'; import { FormattedMessage } from 'react-intl'; import { Button, Modal, Editor } from '~/ui'; import { CancelIcon, CheckIcon, DeleteIcon } from '~/ui/Icons'; import styles from './loadContract.css'; const SelectableList = makeSelectable(List); const REMOVAL_STYLE = { backgroundColor: 'none', cursor: 'default' }; 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; return ( ) : ( ) } visible > { 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() } { this.renderContracts(contracts) } ); return (
{ contractsTab } } > { this.renderEditor() } { this.renderContracts(snippets, false) }
); } renderConfirmRemoval () { const { deleteId } = this.state; const { name, timestamp, sourcecode } = this.props.contracts[deleteId]; return (

} style={ REMOVAL_STYLE } />
); } 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); return ( ) : null } secondaryText={ description || ( ) } style={ selected === id ? SELECTED_STYLE : null } value={ id } /> ); }); } renderDialogActions () { const { deleteRequest } = this.state; if (deleteRequest) { return [