Fix wallet view (#6597)
* Add safe fail for empty logs * Filter transactions * Add more logging * Fix Wallet Creation and wallet tx list * Remove logs * Prevent selecting twice same wallet owner * Fix tests * Remove unused props * Remove unused props
This commit is contained in:
committed by
Arkadiy Paronyan
parent
65ca2f9a07
commit
8d1964bc3b
@@ -16,18 +16,21 @@
|
||||
|
||||
import React, { Component, PropTypes } from 'react';
|
||||
import { FormattedMessage } from 'react-intl';
|
||||
import { connect } from 'react-redux';
|
||||
|
||||
import { Form, TypedInput, Input, AddressSelect, InputAddress } from '~/ui';
|
||||
|
||||
import styles from '../createWallet.css';
|
||||
|
||||
export default class WalletDetails extends Component {
|
||||
class WalletDetails extends Component {
|
||||
static propTypes = {
|
||||
accounts: PropTypes.object.isRequired,
|
||||
wallet: PropTypes.object.isRequired,
|
||||
errors: PropTypes.object.isRequired,
|
||||
onChange: PropTypes.func.isRequired,
|
||||
walletType: PropTypes.string.isRequired
|
||||
walletType: PropTypes.string.isRequired,
|
||||
|
||||
knownAddresses: PropTypes.array
|
||||
};
|
||||
|
||||
render () {
|
||||
@@ -103,7 +106,10 @@ export default class WalletDetails extends Component {
|
||||
}
|
||||
|
||||
renderMultisigDetails () {
|
||||
const { accounts, wallet, errors } = this.props;
|
||||
const { accounts, knownAddresses, wallet, errors } = this.props;
|
||||
const allowedOwners = knownAddresses
|
||||
// Exclude sender and already owners of the wallet
|
||||
.filter((address) => !wallet.owners.includes(address) && address !== wallet.account);
|
||||
|
||||
return (
|
||||
<Form>
|
||||
@@ -163,7 +169,7 @@ export default class WalletDetails extends Component {
|
||||
/>
|
||||
|
||||
<TypedInput
|
||||
accounts={ accounts }
|
||||
allowedValues={ allowedOwners }
|
||||
label={
|
||||
<FormattedMessage
|
||||
id='createWallet.details.ownersMulti.label'
|
||||
@@ -249,3 +255,21 @@ export default class WalletDetails extends Component {
|
||||
this.props.onChange({ daylimit });
|
||||
}
|
||||
}
|
||||
|
||||
function mapStateToProps (initState) {
|
||||
const { accounts, contacts, contracts } = initState.personal;
|
||||
const knownAddresses = [].concat(
|
||||
Object.keys(accounts),
|
||||
Object.keys(contacts),
|
||||
Object.keys(contracts)
|
||||
);
|
||||
|
||||
return () => ({
|
||||
knownAddresses
|
||||
});
|
||||
}
|
||||
|
||||
export default connect(
|
||||
mapStateToProps,
|
||||
null
|
||||
)(WalletDetails);
|
||||
|
||||
@@ -25,6 +25,22 @@ import { ACCOUNTS } from '../createWallet.test.js';
|
||||
let component;
|
||||
let onChange;
|
||||
|
||||
function createRedux () {
|
||||
return {
|
||||
dispatch: sinon.stub(),
|
||||
subscribe: sinon.stub(),
|
||||
getState: () => {
|
||||
return {
|
||||
personal: {
|
||||
accounts: {},
|
||||
contacts: {},
|
||||
contracts: {}
|
||||
}
|
||||
};
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
function render (walletType = 'MULTISIG') {
|
||||
onChange = sinon.stub();
|
||||
component = shallow(
|
||||
@@ -36,7 +52,12 @@ function render (walletType = 'MULTISIG') {
|
||||
owners: []
|
||||
} }
|
||||
walletType={ walletType }
|
||||
/>
|
||||
/>,
|
||||
{
|
||||
context: {
|
||||
store: createRedux()
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
return component;
|
||||
|
||||
@@ -283,7 +283,8 @@ export default class CreateWalletStore {
|
||||
|
||||
const owners = _wallet.owners.filter((owner) => !/^(0x)?0*$/.test(owner));
|
||||
|
||||
if (_wallet.required > owners.length) {
|
||||
// Real number of owners is owners + creator
|
||||
if (_wallet.required > owners.length + 1) {
|
||||
requiredValidation.valueError = 'the number of required validators should be lower or equal the number of owners';
|
||||
}
|
||||
|
||||
|
||||
@@ -43,7 +43,6 @@ export default class ParametersStep extends Component {
|
||||
};
|
||||
|
||||
static propTypes = {
|
||||
accounts: PropTypes.object.isRequired,
|
||||
onParamsChange: PropTypes.func.isRequired,
|
||||
|
||||
inputs: PropTypes.array,
|
||||
@@ -60,7 +59,7 @@ export default class ParametersStep extends Component {
|
||||
}
|
||||
|
||||
renderConstructorInputs () {
|
||||
const { accounts, params, paramsError } = this.props;
|
||||
const { params, paramsError } = this.props;
|
||||
const { inputs } = this.props;
|
||||
|
||||
if (!inputs || !inputs.length) {
|
||||
@@ -78,7 +77,6 @@ export default class ParametersStep extends Component {
|
||||
return (
|
||||
<div key={ index } className={ styles.funcparams }>
|
||||
<TypedInput
|
||||
accounts={ accounts }
|
||||
error={ error }
|
||||
isEth={ false }
|
||||
label={ label }
|
||||
|
||||
@@ -314,7 +314,6 @@ class DeployContract extends Component {
|
||||
return (
|
||||
<ParametersStep
|
||||
{ ...this.state }
|
||||
accounts={ accounts }
|
||||
onParamsChange={ this.onParamsChange }
|
||||
readOnly={ readOnly }
|
||||
/>
|
||||
|
||||
@@ -177,7 +177,7 @@ export default class DetailsStep extends Component {
|
||||
}
|
||||
|
||||
renderParameters () {
|
||||
const { accounts, func, values, valuesError, onValueChange } = this.props;
|
||||
const { func, values, valuesError, onValueChange } = this.props;
|
||||
|
||||
if (!func) {
|
||||
return null;
|
||||
@@ -197,7 +197,6 @@ export default class DetailsStep extends Component {
|
||||
value={ values[index] }
|
||||
error={ valuesError[index] }
|
||||
onChange={ onChange }
|
||||
accounts={ accounts }
|
||||
param={ input.type }
|
||||
isEth={ false }
|
||||
/>
|
||||
|
||||
@@ -34,7 +34,6 @@ class WalletSettings extends Component {
|
||||
};
|
||||
|
||||
static propTypes = {
|
||||
accountsInfo: PropTypes.object.isRequired,
|
||||
wallet: PropTypes.object.isRequired,
|
||||
onClose: PropTypes.func.isRequired,
|
||||
senders: PropTypes.object.isRequired
|
||||
@@ -74,7 +73,7 @@ class WalletSettings extends Component {
|
||||
default:
|
||||
case 'EDIT':
|
||||
const { errors, fromString, wallet } = this.store;
|
||||
const { accountsInfo, senders } = this.props;
|
||||
const { senders } = this.props;
|
||||
|
||||
return (
|
||||
<Form>
|
||||
@@ -143,7 +142,6 @@ class WalletSettings extends Component {
|
||||
}
|
||||
value={ wallet.owners.slice() }
|
||||
onChange={ this.store.onOwnersChange }
|
||||
accounts={ accountsInfo }
|
||||
param='address[]'
|
||||
/>
|
||||
|
||||
@@ -443,13 +441,13 @@ class WalletSettings extends Component {
|
||||
}
|
||||
|
||||
function mapStateToProps (initState, initProps) {
|
||||
const { accountsInfo, accounts } = initState.personal;
|
||||
const { accounts } = initState.personal;
|
||||
const { owners } = initProps.wallet;
|
||||
|
||||
const senders = pick(accounts, owners);
|
||||
|
||||
return () => {
|
||||
return { accountsInfo, senders };
|
||||
return { senders };
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user