From 6f497a435bbb135441ed2af6fe12567d8c82db48 Mon Sep 17 00:00:00 2001 From: George Lima Date: Fri, 8 Feb 2019 01:20:39 -0300 Subject: [PATCH] feat(send): add calcs to max send value and current address balance --- app/views/send.js | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/app/views/send.js b/app/views/send.js index d2ada46..bb3a222 100644 --- a/app/views/send.js +++ b/app/views/send.js @@ -220,6 +220,7 @@ type Props = { validateAddress: ({ address: string }) => void, loadAddresses: () => void, loadZECPrice: () => void, + getAddressBalance: ({ address: string }) => void, }; type State = { @@ -254,17 +255,31 @@ export class SendView extends PureComponent { } handleChange = (field: string) => (value: string) => { - const { validateAddress } = this.props; + const { validateAddress, getAddressBalance, balance } = this.props; + const { fee, amount } = this.state; if (field === 'to') { - // eslint-disable-next-line max-len this.setState(() => ({ [field]: value }), () => validateAddress({ address: value })); + } else if (field === 'amount') { + const amountWithFee = new BigNumber(value).plus(fee || 0); + + const validAmount = amountWithFee.isGreaterThan(balance) + ? new BigNumber(balance).minus(fee || 0).toNumber() + : value; + + this.setState(() => ({ [field]: validAmount })); } else { - this.setState(() => ({ [field]: value })); + if (field === 'from') getAddressBalance({ address: value }); + + this.setState(() => ({ [field]: value }), () => { + if (field === 'fee') this.handleChange('amount')(amount); + }); } }; handleChangeFeeType = (value: string) => { + const { amount } = this.state; + if (value === FEES.CUSTOM) { this.setState(() => ({ feeType: FEES.CUSTOM, @@ -273,10 +288,13 @@ export class SendView extends PureComponent { } else { const fee = new BigNumber(value); - this.setState(() => ({ - feeType: fee.toString(), - fee: fee.toNumber(), - })); + this.setState( + () => ({ + feeType: fee.toString(), + fee: fee.toNumber(), + }), + () => this.handleChange('amount')(amount), + ); } }; @@ -474,6 +492,7 @@ export class SendView extends PureComponent { placeholder='ZEC 0.0' min={0.01} name='amount' + disabled={!from} />