// Copyright 2015, 2016 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 { observer } from 'mobx-react'; import { pick } from 'lodash'; import ActionDone from 'material-ui/svg-icons/action/done'; import ContentClear from 'material-ui/svg-icons/content/clear'; import NavigationArrowForward from 'material-ui/svg-icons/navigation/arrow-forward'; import { Button, Modal, TxHash, BusyStep, Form, TypedInput, InputAddress, AddressSelect } from '~/ui'; import { fromWei } from '~/api/util/wei'; import WalletSettingsStore from './walletSettingsStore.js'; import styles from './walletSettings.css'; @observer class WalletSettings extends Component { static contextTypes = { api: PropTypes.object.isRequired }; static propTypes = { accounts: PropTypes.object.isRequired, wallet: PropTypes.object.isRequired, onClose: PropTypes.func.isRequired, senders: PropTypes.object.isRequired }; store = new WalletSettingsStore(this.context.api, this.props.wallet); render () { const { stage, steps, waiting, rejected } = this.store; if (rejected) { return ( ); } return ( s.title) } waiting={ waiting } > { this.renderPage() } ); } renderPage () { const { step } = this.store; switch (step) { case 'SENDING': return ( { this.store.requests.map((req) => { const key = req.id; if (req.txhash) { return (); } if (req.rejected) { return (

The transaction #{parseInt(key, 16)} has been rejected

); } }) }
); case 'CONFIRMATION': const { changes } = this.store; return (
{ this.renderChanges(changes) }
); default: case 'EDIT': const { wallet, errors } = this.store; const { accounts, senders } = this.props; return (

In order to edit this contract's settings, at least { this.store.initialWallet.require.toNumber() } owners have to send the very same modifications. Otherwise, no modification will be taken into account...

); } } renderChanges (changes) { if (changes.length === 0) { return (

No modifications have been made to the Wallet settings.

); } const modifications = changes.map((change, index) => (
{ this.renderChange(change) }
)); return (

You are about to make the following modifications

{ modifications }
); } renderChange (change) { const { accounts } = this.props; switch (change.type) { case 'dailylimit': return (
Change Daily Limit
from { fromWei(change.initial).toFormat() } to { fromWei(change.value).toFormat() }
); case 'require': return (
Change Required Owners
from { change.initial.toNumber() } to { change.value.toNumber() }
); case 'add_owner': return (
Add Owner
); case 'remove_owner': return (
Remove Owner
); } } renderDialogActions () { const { onClose } = this.props; const { step, hasErrors, rejected, onNext, send, done } = this.store; const cancelBtn = (