// 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 { observer } from 'mobx-react'; import React, { Component, PropTypes } from 'react'; import { FormattedMessage } from 'react-intl'; import { connect } from 'react-redux'; import { bindActionCreators } from 'redux'; import HardwareStore from '@parity/shared/mobx/hardwareStore'; import HistoryStore from '@parity/shared/mobx/historyStore'; import { newError } from '@parity/shared/redux/actions'; import { setVisibleAccounts } from '@parity/shared/redux/providers/personalActions'; import { fetchCertifiers, fetchCertifications } from '@parity/shared/redux/providers/certifications/actions'; import shapeshiftBtn from '~/../assets/images/shapeshift-btn.png'; import { Actionbar, Button, ConfirmDialog, Input, Page, Portal } from '~/ui'; import { DeleteIcon, DialIcon, EditIcon, LockedIcon, SendIcon, VerifyIcon, FileDownloadIcon } from '~/ui/Icons'; import DeleteAccount from './DeleteAccount'; import EditMeta from './EditMeta'; import DeleteAddress from '../Address/Delete'; import ExportStore from '../Accounts/ExportAccount/exportStore'; import Faucet from './Faucet'; import PasswordManager from './PasswordManager'; import Shapeshift from './Shapeshift'; import Transfer from './Transfer'; import Verification from './Verification'; import Header from './Header'; import Store from './store'; import Transactions from './Transactions'; import styles from './account.css'; const accountsHistory = HistoryStore.get('accounts'); @observer class Account extends Component { static contextTypes = { api: PropTypes.object.isRequired }; static propTypes = { accounts: PropTypes.object.isRequired, fetchCertifiers: PropTypes.func.isRequired, fetchCertifications: PropTypes.func.isRequired, setVisibleAccounts: PropTypes.func.isRequired, account: PropTypes.object, certifications: PropTypes.object, netVersion: PropTypes.string.isRequired, newError: PropTypes.func, params: PropTypes.object } store = new Store(); hwstore = HardwareStore.get(this.context.api); componentWillMount () { const { accounts, newError, params } = this.props; const { address } = params; this.exportStore = new ExportStore(this.context.api, accounts, newError, address); } componentDidMount () { const { params } = this.props; if (params.address) { accountsHistory.add(params.address, 'wallet'); } this.props.fetchCertifiers(); this.setVisibleAccounts(); } componentWillReceiveProps (nextProps) { const prevAddress = this.props.params.address; const nextAddress = nextProps.params.address; const { accounts } = nextProps; if (prevAddress !== nextAddress) { this.setVisibleAccounts(nextProps); } if (!Object.keys(this.exportStore.accounts).length) { this.exportStore.setAccounts(accounts); } } componentWillUnmount () { this.props.setVisibleAccounts([]); } setVisibleAccounts (props = this.props) { const { params, setVisibleAccounts, fetchCertifications } = props; const addresses = [params.address]; setVisibleAccounts(addresses); fetchCertifications(params.address); } render () { const { account } = this.props; const { address } = this.props.params; if (!account) { return null; } const isAvailable = !account.hardware || this.hwstore.isConnected(address); return (
{ this.renderDeleteDialog(account) } { this.renderEditDialog(account) } { this.renderExportDialog() } { this.renderFaucetDialog() } { this.renderFundDialog() } { this.renderPasswordDialog(account) } { this.renderTransferDialog(account) } { this.renderVerificationDialog() } { this.renderActionbar(account) }
); } isKovan = (netVersion) => { return netVersion === '42'; } isMainnet = (netVersion) => { return netVersion === '1'; } isFaucettable = (netVersion, certifications, address) => { return this.isKovan(netVersion) || ( this.isMainnet(netVersion) && this.isSmsCertified(certifications, address) ); } isSmsCertified = (_certifications, address) => { const certifications = _certifications && _certifications[address] ? _certifications[address].filter((cert) => cert.name.indexOf('smsverification') === 0) : []; return certifications.length !== 0; } renderActionbar (account) { const { certifications, netVersion } = this.props; const { address } = this.props.params; const isVerifiable = this.isMainnet(netVersion); const isFaucettable = this.isFaucettable(netVersion, certifications, address); const buttons = [