diff --git a/src/components/AdvancedOptions/EthereumKind.js b/src/components/AdvancedOptions/EthereumKind.js index 0fac97b3..e70e5f3f 100644 --- a/src/components/AdvancedOptions/EthereumKind.js +++ b/src/components/AdvancedOptions/EthereumKind.js @@ -25,7 +25,7 @@ export default translate()(({ gasLimit, onChangeGasLimit, t }: Props) => ( { - const gasLimit = parseInt(str, 10) + const gasLimit = parseInt(str || 0, 10) if (!isNaN(gasLimit) && isFinite(gasLimit)) onChangeGasLimit(gasLimit) else onChangeGasLimit(0x5208) }} diff --git a/src/components/FeesField/BitcoinKind.js b/src/components/FeesField/BitcoinKind.js index e9458045..0410eae4 100644 --- a/src/components/FeesField/BitcoinKind.js +++ b/src/components/FeesField/BitcoinKind.js @@ -50,10 +50,9 @@ const customItem = { feePerByte: 0, } -class FeesField extends Component< - Props & { fees?: Fees, error?: Error }, - { isFocused: boolean, items: FeeItem[], selectedItem: FeeItem }, -> { +type State = { isFocused: boolean, items: FeeItem[], selectedItem: FeeItem } + +class FeesField extends Component { state = { items: [customItem], selectedItem: customItem, @@ -103,10 +102,21 @@ class FeesField extends Component< onSelectChange = selectedItem => { const { onChange } = this.props - this.setState({ selectedItem }) - if (selectedItem.feePerByte) onChange(selectedItem.feePerByte) + const patch: $Shape = { selectedItem } + if (selectedItem.feePerByte) { + onChange(selectedItem.feePerByte) + } else { + const { input } = this + if (!selectedItem.feePerByte && input.current) { + patch.isFocused = true + input.current.select() + } + } + this.setState(patch) } + input = React.createRef() + render() { const { account, feePerByte, error, onChange, t } = this.props const { items, selectedItem } = this.state @@ -118,6 +128,7 @@ class FeesField extends Component< { } } componentWillUnmount() { - this.unmount = true + this.syncId++ } - unmount = false + syncId = 0 async resync() { const { account, bridge, transaction } = this.props + const syncId = ++this.syncId const canBeSpent = await bridge.canBeSpent(account, transaction) - if (this.unmount) return + if (this.syncId !== syncId) return this.setState({ canBeSpent }) } diff --git a/src/components/modals/Send/fields/RecipientField.js b/src/components/modals/Send/fields/RecipientField.js index f01dd558..f7974c54 100644 --- a/src/components/modals/Send/fields/RecipientField.js +++ b/src/components/modals/Send/fields/RecipientField.js @@ -33,16 +33,17 @@ class RecipientField extends Component, { isVali } } componentWillUnmount() { - this.unmount = true + this.syncId++ } - unmount = false + syncId = 0 async resync() { const { account, bridge, transaction } = this.props + const syncId = ++this.syncId const isValid = await bridge.isRecipientValid( account.currency, bridge.getTransactionRecipient(account, transaction), ) - if (this.unmount) return + if (syncId !== this.syncId) return this.setState({ isValid }) } diff --git a/src/components/modals/Send/steps/01-step-amount.js b/src/components/modals/Send/steps/01-step-amount.js index efa72337..0e2524d0 100644 --- a/src/components/modals/Send/steps/01-step-amount.js +++ b/src/components/modals/Send/steps/01-step-amount.js @@ -112,14 +112,16 @@ export class StepAmountFooter extends PureComponent< } componentWillUnmount() { - this._isUnmounted = true + this.syncId++ } - _isUnmounted = false + syncId = 0 async resync() { const { account, bridge, transaction } = this.props + const syncId = ++this.syncId + if (!account || !transaction || !bridge) { return } @@ -128,9 +130,9 @@ export class StepAmountFooter extends PureComponent< try { const totalSpent = await bridge.getTotalSpent(account, transaction) - if (this._isUnmounted) return + if (syncId !== this.syncId) return const canBeSpent = await bridge.canBeSpent(account, transaction) - if (this._isUnmounted) return + if (syncId !== this.syncId) return this.setState({ totalSpent, canBeSpent, isSyncing: false }) } catch (err) { this.setState({ isSyncing: false })