Fix Wallet Settings Modal (#3856)
* Fixes wallet settings modal * Fix linting
This commit is contained in:
parent
14a9942d14
commit
670be41b62
@ -17,7 +17,6 @@
|
|||||||
import React, { Component, PropTypes } from 'react';
|
import React, { Component, PropTypes } from 'react';
|
||||||
|
|
||||||
import { Form, TypedInput, Input, AddressSelect, InputAddress } from '~/ui';
|
import { Form, TypedInput, Input, AddressSelect, InputAddress } from '~/ui';
|
||||||
import { parseAbiType } from '~/util/abi';
|
|
||||||
|
|
||||||
import styles from '../createWallet.css';
|
import styles from '../createWallet.css';
|
||||||
|
|
||||||
@ -105,7 +104,7 @@ export default class WalletDetails extends Component {
|
|||||||
value={ wallet.owners.slice() }
|
value={ wallet.owners.slice() }
|
||||||
onChange={ this.onOwnersChange }
|
onChange={ this.onOwnersChange }
|
||||||
accounts={ accounts }
|
accounts={ accounts }
|
||||||
param={ parseAbiType('address[]') }
|
param='address[]'
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<div className={ styles.splitInput }>
|
<div className={ styles.splitInput }>
|
||||||
@ -115,7 +114,7 @@ export default class WalletDetails extends Component {
|
|||||||
value={ wallet.required }
|
value={ wallet.required }
|
||||||
error={ errors.required }
|
error={ errors.required }
|
||||||
onChange={ this.onRequiredChange }
|
onChange={ this.onRequiredChange }
|
||||||
param={ parseAbiType('uint') }
|
param='uint'
|
||||||
min={ 1 }
|
min={ 1 }
|
||||||
max={ wallet.owners.length + 1 }
|
max={ wallet.owners.length + 1 }
|
||||||
/>
|
/>
|
||||||
@ -126,7 +125,7 @@ export default class WalletDetails extends Component {
|
|||||||
value={ wallet.daylimit }
|
value={ wallet.daylimit }
|
||||||
error={ errors.daylimit }
|
error={ errors.daylimit }
|
||||||
onChange={ this.onDaylimitChange }
|
onChange={ this.onDaylimitChange }
|
||||||
param={ parseAbiType('uint') }
|
param='uint'
|
||||||
isEth
|
isEth
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
@ -83,6 +83,7 @@ export default class ParametersStep extends Component {
|
|||||||
accounts={ accounts }
|
accounts={ accounts }
|
||||||
onChange={ onChange }
|
onChange={ onChange }
|
||||||
param={ param }
|
param={ param }
|
||||||
|
isEth={ false }
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
@ -18,7 +18,6 @@ import React, { Component, PropTypes } from 'react';
|
|||||||
import { Checkbox, MenuItem } from 'material-ui';
|
import { Checkbox, MenuItem } from 'material-ui';
|
||||||
|
|
||||||
import { AddressSelect, Form, Input, Select, TypedInput } from '~/ui';
|
import { AddressSelect, Form, Input, Select, TypedInput } from '~/ui';
|
||||||
import { parseAbiType } from '~/util/abi';
|
|
||||||
|
|
||||||
import styles from '../executeContract.css';
|
import styles from '../executeContract.css';
|
||||||
|
|
||||||
@ -162,7 +161,8 @@ export default class DetailsStep extends Component {
|
|||||||
error={ valuesError[index] }
|
error={ valuesError[index] }
|
||||||
onChange={ onChange }
|
onChange={ onChange }
|
||||||
accounts={ accounts }
|
accounts={ accounts }
|
||||||
param={ parseAbiType(input.type) }
|
param={ input.type }
|
||||||
|
isEth={ false }
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
@ -22,7 +22,6 @@ import { pick } from 'lodash';
|
|||||||
import ActionDone from 'material-ui/svg-icons/action/done';
|
import ActionDone from 'material-ui/svg-icons/action/done';
|
||||||
import ContentClear from 'material-ui/svg-icons/content/clear';
|
import ContentClear from 'material-ui/svg-icons/content/clear';
|
||||||
import NavigationArrowForward from 'material-ui/svg-icons/navigation/arrow-forward';
|
import NavigationArrowForward from 'material-ui/svg-icons/navigation/arrow-forward';
|
||||||
import { parseAbiType } from '~/util/abi';
|
|
||||||
|
|
||||||
import { Button, Modal, TxHash, BusyStep, Form, TypedInput, InputAddress, AddressSelect } from '~/ui';
|
import { Button, Modal, TxHash, BusyStep, Form, TypedInput, InputAddress, AddressSelect } from '~/ui';
|
||||||
import { fromWei } from '~/api/util/wei';
|
import { fromWei } from '~/api/util/wei';
|
||||||
@ -107,10 +106,7 @@ class WalletSettings extends Component {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<p>You are about to make the following modifications</p>
|
{ this.renderChanges(changes) }
|
||||||
<div>
|
|
||||||
{ this.renderChanges(changes) }
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -142,19 +138,19 @@ class WalletSettings extends Component {
|
|||||||
value={ wallet.owners.slice() }
|
value={ wallet.owners.slice() }
|
||||||
onChange={ this.store.onOwnersChange }
|
onChange={ this.store.onOwnersChange }
|
||||||
accounts={ accounts }
|
accounts={ accounts }
|
||||||
param={ parseAbiType('address[]') }
|
param='address[]'
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<div className={ styles.splitInput }>
|
<div className={ styles.splitInput }>
|
||||||
<TypedInput
|
<TypedInput
|
||||||
label='required owners'
|
label='required owners'
|
||||||
hint='number of required owners to accept a transaction'
|
hint='number of required owners to accept a transaction'
|
||||||
value={ wallet.require }
|
|
||||||
error={ errors.require }
|
error={ errors.require }
|
||||||
onChange={ this.store.onRequireChange }
|
|
||||||
param={ parseAbiType('uint') }
|
|
||||||
min={ 1 }
|
min={ 1 }
|
||||||
|
onChange={ this.store.onRequireChange }
|
||||||
max={ wallet.owners.length }
|
max={ wallet.owners.length }
|
||||||
|
param='uint'
|
||||||
|
value={ wallet.require }
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<TypedInput
|
<TypedInput
|
||||||
@ -163,7 +159,7 @@ class WalletSettings extends Component {
|
|||||||
value={ wallet.dailylimit }
|
value={ wallet.dailylimit }
|
||||||
error={ errors.dailylimit }
|
error={ errors.dailylimit }
|
||||||
onChange={ this.store.onDailylimitChange }
|
onChange={ this.store.onDailylimitChange }
|
||||||
param={ parseAbiType('uint') }
|
param='uint'
|
||||||
isEth
|
isEth
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
@ -173,11 +169,24 @@ class WalletSettings extends Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
renderChanges (changes) {
|
renderChanges (changes) {
|
||||||
return changes.map((change, index) => (
|
if (changes.length === 0) {
|
||||||
|
return (
|
||||||
|
<p>No modifications have been made to the Wallet settings.</p>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
const modifications = changes.map((change, index) => (
|
||||||
<div key={ `${change.type}_${index}` }>
|
<div key={ `${change.type}_${index}` }>
|
||||||
{ this.renderChange(change) }
|
{ this.renderChange(change) }
|
||||||
</div>
|
</div>
|
||||||
));
|
));
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<p>You are about to make the following modifications</p>
|
||||||
|
{ modifications }
|
||||||
|
</div>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
renderChange (change) {
|
renderChange (change) {
|
||||||
@ -297,6 +306,12 @@ class WalletSettings extends Component {
|
|||||||
return done ? [ closeBtn ] : [ closeBtn, sendingBtn ];
|
return done ? [ closeBtn ] : [ closeBtn, sendingBtn ];
|
||||||
|
|
||||||
case 'CONFIRMATION':
|
case 'CONFIRMATION':
|
||||||
|
const { changes } = this.store;
|
||||||
|
|
||||||
|
if (changes.length === 0) {
|
||||||
|
return [ closeBtn ];
|
||||||
|
}
|
||||||
|
|
||||||
return [ cancelBtn, sendBtn ];
|
return [ cancelBtn, sendBtn ];
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -26,7 +26,7 @@ import { fromWei, toWei } from '~/api/util/wei';
|
|||||||
import Input from '~/ui/Form/Input';
|
import Input from '~/ui/Form/Input';
|
||||||
import InputAddressSelect from '~/ui/Form/InputAddressSelect';
|
import InputAddressSelect from '~/ui/Form/InputAddressSelect';
|
||||||
import Select from '~/ui/Form/Select';
|
import Select from '~/ui/Form/Select';
|
||||||
import { ABI_TYPES } from '~/util/abi';
|
import { ABI_TYPES, parseAbiType } from '~/util/abi';
|
||||||
|
|
||||||
import styles from './typedInput.css';
|
import styles from './typedInput.css';
|
||||||
|
|
||||||
@ -34,22 +34,25 @@ export default class TypedInput extends Component {
|
|||||||
|
|
||||||
static propTypes = {
|
static propTypes = {
|
||||||
onChange: PropTypes.func.isRequired,
|
onChange: PropTypes.func.isRequired,
|
||||||
param: PropTypes.object.isRequired,
|
|
||||||
|
|
||||||
accounts: PropTypes.object,
|
accounts: PropTypes.object,
|
||||||
error: PropTypes.any,
|
error: PropTypes.any,
|
||||||
value: PropTypes.any,
|
|
||||||
label: PropTypes.string,
|
|
||||||
hint: PropTypes.string,
|
hint: PropTypes.string,
|
||||||
min: PropTypes.number,
|
isEth: PropTypes.bool,
|
||||||
|
label: PropTypes.string,
|
||||||
max: PropTypes.number,
|
max: PropTypes.number,
|
||||||
isEth: PropTypes.bool
|
min: PropTypes.number,
|
||||||
|
param: PropTypes.oneOfType([
|
||||||
|
PropTypes.object,
|
||||||
|
PropTypes.string
|
||||||
|
]).isRequired,
|
||||||
|
value: PropTypes.any
|
||||||
};
|
};
|
||||||
|
|
||||||
static defaultProps = {
|
static defaultProps = {
|
||||||
min: null,
|
min: null,
|
||||||
max: null,
|
max: null,
|
||||||
isEth: false
|
isEth: null
|
||||||
};
|
};
|
||||||
|
|
||||||
state = {
|
state = {
|
||||||
@ -64,7 +67,26 @@ export default class TypedInput extends Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
render () {
|
render () {
|
||||||
const { param, isEth } = this.props;
|
const { param } = this.props;
|
||||||
|
|
||||||
|
if (typeof param === 'string') {
|
||||||
|
const parsedParam = parseAbiType(param);
|
||||||
|
|
||||||
|
if (parsedParam) {
|
||||||
|
return this.renderParam(parsedParam);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (param) {
|
||||||
|
return this.renderParam(param);
|
||||||
|
}
|
||||||
|
|
||||||
|
console.error('<TypedInput>', `unkown "${param}" param passed to props`);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
renderParam (param) {
|
||||||
|
const { isEth } = this.props;
|
||||||
const { type } = param;
|
const { type } = param;
|
||||||
|
|
||||||
if (type === ABI_TYPES.ARRAY) {
|
if (type === ABI_TYPES.ARRAY) {
|
||||||
@ -163,7 +185,16 @@ export default class TypedInput extends Component {
|
|||||||
return this.renderDefault();
|
return this.renderDefault();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If the `isEth` prop is present (true or false)
|
||||||
|
// then render the ETH toggle (usefull for contract execution)
|
||||||
|
// Don't by default
|
||||||
if (type === ABI_TYPES.INT) {
|
if (type === ABI_TYPES.INT) {
|
||||||
|
const { isEth } = this.props;
|
||||||
|
|
||||||
|
if (typeof isEth !== 'boolean') {
|
||||||
|
return this.renderInteger();
|
||||||
|
}
|
||||||
|
|
||||||
return this.renderEth();
|
return this.renderEth();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -143,4 +143,7 @@ export function parseAbiType (type) {
|
|||||||
signed: true
|
signed: true
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If no matches, return null
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user