aboutsummaryrefslogtreecommitdiffstats
path: root/packages/instant/src/util
diff options
context:
space:
mode:
authorSteve Klebanoff <steve@0xproject.com>2018-11-03 06:45:58 +0800
committerGitHub <noreply@github.com>2018-11-03 06:45:58 +0800
commitd0f20a4fd5d1ab563d4b1c941b55018da129334e (patch)
treef8e19a2aeba33214b0eb784e402a491b9036ff07 /packages/instant/src/util
parent18fef7ade493798426417c7095d0458219423d14 (diff)
parentf5c7a3c26a4a1ddb6ba7692cee0d332f2dedb738 (diff)
downloaddexon-sol-tools-d0f20a4fd5d1ab563d4b1c941b55018da129334e.tar
dexon-sol-tools-d0f20a4fd5d1ab563d4b1c941b55018da129334e.tar.gz
dexon-sol-tools-d0f20a4fd5d1ab563d4b1c941b55018da129334e.tar.bz2
dexon-sol-tools-d0f20a4fd5d1ab563d4b1c941b55018da129334e.tar.lz
dexon-sol-tools-d0f20a4fd5d1ab563d4b1c941b55018da129334e.tar.xz
dexon-sol-tools-d0f20a4fd5d1ab563d4b1c941b55018da129334e.tar.zst
dexon-sol-tools-d0f20a4fd5d1ab563d4b1c941b55018da129334e.zip
Merge pull request #1206 from 0xProject/fix/instant/decimal-fields-scaling-amount-input-bn
[instant] Fix decimal input issues on instant
Diffstat (limited to 'packages/instant/src/util')
-rw-r--r--packages/instant/src/util/big_number_input.ts34
-rw-r--r--packages/instant/src/util/maybe_big_number.ts25
2 files changed, 25 insertions, 34 deletions
diff --git a/packages/instant/src/util/big_number_input.ts b/packages/instant/src/util/big_number_input.ts
deleted file mode 100644
index 370d91a0a..000000000
--- a/packages/instant/src/util/big_number_input.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-import { BigNumber } from '@0x/utils';
-import * as _ from 'lodash';
-
-/**
- * A BigNumber extension that is more flexible about decimal strings.
- * Such as allowing:
- * new BigNumberInput('0.') => 0
- * new BigNumberInput('1.') => 1
- * new BigNumberInput('1..') => still throws
- */
-export class BigNumberInput extends BigNumber {
- private readonly _isEndingWithDecimal: boolean;
- constructor(numberOrString: string | number) {
- if (_.isString(numberOrString)) {
- const hasDecimalPeriod = _.endsWith(numberOrString, '.');
- let internalString = numberOrString;
- if (hasDecimalPeriod) {
- internalString = numberOrString.slice(0, -1);
- }
- super(internalString);
- this._isEndingWithDecimal = hasDecimalPeriod;
- } else {
- super(numberOrString);
- this._isEndingWithDecimal = false;
- }
- }
- public toDisplayString(): string {
- const internalString = super.toString();
- if (this._isEndingWithDecimal) {
- return `${internalString}.`;
- }
- return internalString;
- }
-}
diff --git a/packages/instant/src/util/maybe_big_number.ts b/packages/instant/src/util/maybe_big_number.ts
new file mode 100644
index 000000000..9d3746e10
--- /dev/null
+++ b/packages/instant/src/util/maybe_big_number.ts
@@ -0,0 +1,25 @@
+import { BigNumber } from '@0x/utils';
+import * as _ from 'lodash';
+
+import { Maybe } from '../types';
+
+export const maybeBigNumberUtil = {
+ // converts a string to a Maybe<BigNumber>
+ // if string is a NaN, considered undefined
+ stringToMaybeBigNumber: (stringValue: string): Maybe<BigNumber> => {
+ let validBigNumber: BigNumber;
+ try {
+ validBigNumber = new BigNumber(stringValue);
+ } catch {
+ return undefined;
+ }
+
+ return validBigNumber.isNaN() ? undefined : validBigNumber;
+ },
+ areMaybeBigNumbersEqual: (val1: Maybe<BigNumber>, val2: Maybe<BigNumber>): boolean => {
+ if (!_.isUndefined(val1) && !_.isUndefined(val2)) {
+ return val1.equals(val2);
+ }
+ return _.isUndefined(val1) && _.isUndefined(val2);
+ },
+};