// 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 React, { Component, PropTypes } from 'react'; import { connect } from 'react-redux'; import { bindActionCreators } from 'redux'; import moment from 'moment'; import ContentCreate from 'material-ui/svg-icons/content/create'; import ActionDelete from 'material-ui/svg-icons/action/delete'; import ContentSend from 'material-ui/svg-icons/content/send'; import SettingsIcon from 'material-ui/svg-icons/action/settings'; import { nullableProptype } from '~/util/proptypes'; import { EditMeta, Transfer, WalletSettings } from '~/modals'; import { Actionbar, Button, Page, Loading } from '~/ui'; import Delete from '../Address/Delete'; import Header from '../Account/Header'; import WalletDetails from './Details'; import WalletConfirmations from './Confirmations'; import WalletTransactions from './Transactions'; import { setVisibleAccounts } from '~/redux/providers/personalActions'; import styles from './wallet.css'; class WalletContainer extends Component { static propTypes = { isTest: PropTypes.any }; render () { const { isTest, ...others } = this.props; if (isTest !== false && isTest !== true) { return ( ); } return ( ); } } class Wallet extends Component { static contextTypes = { api: PropTypes.object.isRequired }; static propTypes = { address: PropTypes.string.isRequired, balance: nullableProptype(PropTypes.object.isRequired), isTest: PropTypes.bool.isRequired, owned: PropTypes.bool.isRequired, setVisibleAccounts: PropTypes.func.isRequired, wallet: PropTypes.object.isRequired, walletAccount: nullableProptype(PropTypes.object.isRequired) }; state = { showEditDialog: false, showSettingsDialog: false, showTransferDialog: false, showDeleteDialog: false }; componentDidMount () { this.setVisibleAccounts(); } componentWillReceiveProps (nextProps) { const prevAddress = this.props.address; const nextAddress = nextProps.address; if (prevAddress !== nextAddress) { this.setVisibleAccounts(nextProps); } } componentWillUnmount () { this.props.setVisibleAccounts([]); } setVisibleAccounts (props = this.props) { const { address, setVisibleAccounts } = props; const addresses = [ address ]; setVisibleAccounts(addresses); } render () { const { walletAccount, balance, wallet } = this.props; if (!walletAccount) { return null; } const { owners, require, dailylimit } = wallet; return (
{ this.renderEditDialog(walletAccount) } { this.renderSettingsDialog() } { this.renderTransferDialog() } { this.renderDeleteDialog(walletAccount) } { this.renderActionbar() }
{ this.renderInfos() }
{ this.renderDetails() }
); } renderInfos () { const { dailylimit } = this.props.wallet; const { api } = this.context; if (!dailylimit || !dailylimit.limit) { return null; } const _limit = api.util.fromWei(dailylimit.limit); if (_limit.equals(0)) { return null; } const limit = _limit.toFormat(3); const spent = api.util.fromWei(dailylimit.spent).toFormat(3); const date = moment(dailylimit.last.toNumber() * 24 * 3600 * 1000); return (

{ spent } has been spent today, out of { limit } set as the daily limit, which has been reset on { date.format('LL') }

); } renderDetails () { const { address, isTest, wallet } = this.props; const { owners, require, confirmations, transactions } = wallet; if (!owners || !require) { return (
); } return [ , ]; } renderActionbar () { const { balance, owned } = this.props; const showTransferButton = !!(balance && balance.tokens); const buttons = []; if (owned) { buttons.push(