From 222cdd8edad3b024411b100164ca8017eb6bc845 Mon Sep 17 00:00:00 2001 From: Karelian Pie Date: Tue, 6 Jun 2023 15:24:41 +0300 Subject: [PATCH 1/3] feat: Add `isZero` helper --- packages/web-lib/utils/isZero.test.ts | 33 +++++++++++++++++++++++++++ packages/web-lib/utils/isZero.ts | 27 ++++++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 packages/web-lib/utils/isZero.test.ts create mode 100644 packages/web-lib/utils/isZero.ts diff --git a/packages/web-lib/utils/isZero.test.ts b/packages/web-lib/utils/isZero.test.ts new file mode 100644 index 00000000..a02d19fe --- /dev/null +++ b/packages/web-lib/utils/isZero.test.ts @@ -0,0 +1,33 @@ +import {isZero} from '@yearn-finance/web-lib/utils/isZero'; + +describe('isZero function', (): void => { + test('returns false when no argument given', (): void => { + expect(isZero()).toBe(false); + }); + + test.each([ + [0, true], + ['0', true], + ['0.0', true], + ['000', true], + [0n, true], + [`${0}`, true], + [' 0 ', true], + [' 0.00 ', true], + ['-0', true], + [null, false], + [undefined, false], + [-1, false], + ['1', false], + [1, false], + ['-1', false], + ['0.1', false], + [1n, false], + ['abc', false], + [NaN, false], + ['', false], + [' ', false] + ])('isZero(%p) should return %s', (input, expected): void => { + expect(isZero(input)).toBe(expected); + }); +}); diff --git a/packages/web-lib/utils/isZero.ts b/packages/web-lib/utils/isZero.ts new file mode 100644 index 00000000..64abde0d --- /dev/null +++ b/packages/web-lib/utils/isZero.ts @@ -0,0 +1,27 @@ +type TProps = bigint | number | string | null; + +export function isZero(value?: TProps): boolean { + if (value === null || value === undefined || value === "") { + return false; + } + + if (typeof value === "string") { + value = value.trim(); + + if (value === "") { + return false; + } + + // Check if the string can be parsed as a floating-point number + const parsed = Number(value); + if (!isNaN(parsed)) { + return parsed === 0; + } + } + + try { + return BigInt(value) === 0n; + } catch { + return false; + } +} From e670177ea021c9ad7599877318d3c4c4b2e3080c Mon Sep 17 00:00:00 2001 From: Karelian Pie Date: Tue, 6 Jun 2023 15:31:37 +0300 Subject: [PATCH 2/3] fix: Remove unnecessary check --- packages/web-lib/utils/isZero.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/web-lib/utils/isZero.ts b/packages/web-lib/utils/isZero.ts index 64abde0d..50f2f1a0 100644 --- a/packages/web-lib/utils/isZero.ts +++ b/packages/web-lib/utils/isZero.ts @@ -1,7 +1,7 @@ type TProps = bigint | number | string | null; export function isZero(value?: TProps): boolean { - if (value === null || value === undefined || value === "") { + if (value === null || value === undefined) { return false; } From 49697199ff0416c74333701a6c86d5eefeaf2d46 Mon Sep 17 00:00:00 2001 From: Karelian Pie Date: Thu, 8 Jun 2023 10:28:55 +0300 Subject: [PATCH 3/3] feat: Add support for 0,0 --- packages/web-lib/utils/isZero.test.ts | 1 + packages/web-lib/utils/isZero.ts | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/web-lib/utils/isZero.test.ts b/packages/web-lib/utils/isZero.test.ts index a02d19fe..caa2806b 100644 --- a/packages/web-lib/utils/isZero.test.ts +++ b/packages/web-lib/utils/isZero.test.ts @@ -9,6 +9,7 @@ describe('isZero function', (): void => { [0, true], ['0', true], ['0.0', true], + ['0,0', true], ['000', true], [0n, true], [`${0}`, true], diff --git a/packages/web-lib/utils/isZero.ts b/packages/web-lib/utils/isZero.ts index 50f2f1a0..daef2a05 100644 --- a/packages/web-lib/utils/isZero.ts +++ b/packages/web-lib/utils/isZero.ts @@ -6,7 +6,7 @@ export function isZero(value?: TProps): boolean { } if (typeof value === "string") { - value = value.trim(); + value = value.trim().replace(',', '.'); if (value === "") { return false;