diff options
author | Dan Finlay <542863+danfinlay@users.noreply.github.com> | 2018-02-22 07:46:31 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-02-22 07:46:31 +0800 |
commit | eed75735b8e90d121537249cf147c1ece60f1e47 (patch) | |
tree | c7cfc9bea782df7035761caa8c1809d8fde58824 /ui/app/components/input-number.js | |
parent | 16754fa30744df8b3b3edc0e5229db29f3ad23ec (diff) | |
parent | e27a3823ba2595baa7c3378e6a6f2aa5dae30250 (diff) | |
download | tangerine-wallet-browser-eed75735b8e90d121537249cf147c1ece60f1e47.tar tangerine-wallet-browser-eed75735b8e90d121537249cf147c1ece60f1e47.tar.gz tangerine-wallet-browser-eed75735b8e90d121537249cf147c1ece60f1e47.tar.bz2 tangerine-wallet-browser-eed75735b8e90d121537249cf147c1ece60f1e47.tar.lz tangerine-wallet-browser-eed75735b8e90d121537249cf147c1ece60f1e47.tar.xz tangerine-wallet-browser-eed75735b8e90d121537249cf147c1ece60f1e47.tar.zst tangerine-wallet-browser-eed75735b8e90d121537249cf147c1ece60f1e47.zip |
Merge pull request #3050 from MetaMask/uat
[EPIC] Merge UAT into master
Diffstat (limited to 'ui/app/components/input-number.js')
-rw-r--r-- | ui/app/components/input-number.js | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/ui/app/components/input-number.js b/ui/app/components/input-number.js new file mode 100644 index 000000000..fd8c5c309 --- /dev/null +++ b/ui/app/components/input-number.js @@ -0,0 +1,73 @@ +const Component = require('react').Component +const h = require('react-hyperscript') +const inherits = require('util').inherits +const CurrencyInput = require('./currency-input') +const { + addCurrencies, + conversionGTE, + conversionLTE, + subtractCurrencies, +} = require('../conversion-util') + +module.exports = InputNumber + +inherits(InputNumber, Component) +function InputNumber () { + Component.call(this) + + this.setValue = this.setValue.bind(this) +} + +function isValidInput (text) { + const re = /^([1-9]\d*|0)(\.|\.\d*)?$/ + return re.test(text) +} + +InputNumber.prototype.setValue = function (newValue) { + if (newValue && !isValidInput(newValue)) return + const { fixed, min = -1, max = Infinity, onChange } = this.props + + newValue = fixed ? newValue.toFixed(4) : newValue + + const newValueGreaterThanMin = conversionGTE( + { value: newValue || '0', fromNumericBase: 'dec' }, + { value: min, fromNumericBase: 'hex' }, + ) + + const newValueLessThanMax = conversionLTE( + { value: newValue || '0', fromNumericBase: 'dec' }, + { value: max, fromNumericBase: 'hex' }, + ) + if (newValueGreaterThanMin && newValueLessThanMax) { + onChange(newValue) + } else if (!newValueGreaterThanMin) { + onChange(min) + } else if (!newValueLessThanMax) { + onChange(max) + } +} + +InputNumber.prototype.render = function () { + const { unitLabel, step = 1, placeholder, value = 0 } = this.props + + return h('div.customize-gas-input-wrapper', {}, [ + h(CurrencyInput, { + className: 'customize-gas-input', + value, + placeholder, + onInputChange: newValue => { + this.setValue(newValue) + }, + }), + h('span.gas-tooltip-input-detail', {}, [unitLabel]), + h('div.gas-tooltip-input-arrows', {}, [ + h('i.fa.fa-angle-up', { + onClick: () => this.setValue(addCurrencies(value, step)), + }), + h('i.fa.fa-angle-down', { + style: { cursor: 'pointer' }, + onClick: () => this.setValue(subtractCurrencies(value, step)), + }), + ]), + ]) +} |