From 1fe9286428ee2ebd57a32d025c3562e0752d9f35 Mon Sep 17 00:00:00 2001 From: flippedround <734243792@qq.com> Date: Wed, 27 Jul 2022 14:33:29 +0800 Subject: [PATCH 1/3] feat(useFixed): new function --- packages/math/index.ts | 1 + packages/math/useFixed/demo.vue | 52 ++++++++++++++++++++++++++++ packages/math/useFixed/index.md | 28 +++++++++++++++ packages/math/useFixed/index.test.ts | 43 +++++++++++++++++++++++ packages/math/useFixed/index.ts | 30 ++++++++++++++++ 5 files changed, 154 insertions(+) create mode 100644 packages/math/useFixed/demo.vue create mode 100644 packages/math/useFixed/index.md create mode 100644 packages/math/useFixed/index.test.ts create mode 100644 packages/math/useFixed/index.ts diff --git a/packages/math/index.ts b/packages/math/index.ts index ea67a485588..ad66fd058fc 100644 --- a/packages/math/index.ts +++ b/packages/math/index.ts @@ -7,6 +7,7 @@ export * from './useAbs' export * from './useAverage' export * from './useCeil' export * from './useClamp' +export * from './useFixed' export * from './useFloor' export * from './useMath' export * from './useMax' diff --git a/packages/math/useFixed/demo.vue b/packages/math/useFixed/demo.vue new file mode 100644 index 00000000000..ea784e63214 --- /dev/null +++ b/packages/math/useFixed/demo.vue @@ -0,0 +1,52 @@ + + + diff --git a/packages/math/useFixed/index.md b/packages/math/useFixed/index.md new file mode 100644 index 00000000000..23dc0d202fc --- /dev/null +++ b/packages/math/useFixed/index.md @@ -0,0 +1,28 @@ +--- +category: '@Math' +--- + +# useFloor + +Reactive `toFixed`. + +## Usage + +```ts +import { useFixed } from '@vueuse/math' + +const value = ref(3.1415) +const result = useFixed(value, 2) // 3.14 + +const stringResult = useFixed(value, 5, { + type: 'string' +}) // '3.14150' + +const ceilResult = useFixed(value, 2, { + math: 'ceil' +}) // 3.15 + +const floorResult = useFixed(value, 3, { + math: 'floor' +}) // 3.141 +``` diff --git a/packages/math/useFixed/index.test.ts b/packages/math/useFixed/index.test.ts new file mode 100644 index 00000000000..86ac59ac39b --- /dev/null +++ b/packages/math/useFixed/index.test.ts @@ -0,0 +1,43 @@ +import { ref } from 'vue-demi' +import { useFixed } from '.' + +describe('useFixed', () => { + it('should be defined', () => { + expect(useFixed).toBeDefined() + }) + it('should work', () => { + const base = ref(45.125) + const result = useFixed(base, 2) + expect(result.value).toBe(45.13) + base.value = -45.155 + expect(result.value).toBe(-45.15) + }) + it('input string should work', () => { + const base = ref('45.125') + const result = useFixed(base, 2) + expect(result.value).toBe(45.13) + base.value = '-45.155' + expect(result.value).toBe(-45.15) + }) + it('out string should work', () => { + const base = ref('45.125') + const result = useFixed(base, 3, { type: 'string' }) + expect(result.value).toMatchInlineSnapshot('"45.125"') + base.value = '-45.15' + expect(result.value).toMatchInlineSnapshot('"-45.150"') + }) + it('out ceil should work', () => { + const base = ref('45.121') + const result = useFixed(base, 2, { math: 'ceil' }) + expect(result.value).toMatchInlineSnapshot('45.13') + base.value = '-45.151' + expect(result.value).toMatchInlineSnapshot('-45.15') + }) + it('out floor should work', () => { + const base = ref('45.129') + const result = useFixed(base, 2, { math: 'floor' }) + expect(result.value).toMatchInlineSnapshot('45.12') + base.value = '-45.159' + expect(result.value).toMatchInlineSnapshot('-45.16') + }) +}) diff --git a/packages/math/useFixed/index.ts b/packages/math/useFixed/index.ts new file mode 100644 index 00000000000..07a426dacbc --- /dev/null +++ b/packages/math/useFixed/index.ts @@ -0,0 +1,30 @@ +import type { ComputedRef } from 'vue-demi' +import { computed } from 'vue-demi' +import type { MaybeComputedRef } from '@vueuse/shared' +import { resolveUnref } from '@vueuse/shared' + +/** + * Reactive `toFixed` + * + * @see https://vueuse.org/useFixed + */ +export interface FixedTypes { + type?: 'string' | 'number' + math?: 'floor' | 'ceil' | 'round' +} + +export function useFixed( + value: MaybeComputedRef, + digits: MaybeComputedRef, + options?: MaybeComputedRef, +): ComputedRef { + return computed(() => { + const floatValue = parseFloat(`${resolveUnref(value)}`) + const outValue = Math[resolveUnref(options)?.math || 'round'](floatValue * 10 ** resolveUnref(digits)) / 10 ** resolveUnref(digits) + return resolveUnref(options)?.type === 'string' + ? resolveUnref(digits) >= 0 + ? outValue.toFixed(resolveUnref(digits)) + : `${outValue}` + : outValue + }) +} From 377d59c095ef2e62737e1b2e1e8c060e3215d6a4 Mon Sep 17 00:00:00 2001 From: flippedround <734243792@qq.com> Date: Thu, 28 Jul 2022 09:15:17 +0800 Subject: [PATCH 2/3] chore(useToFixed): change function name --- packages/math/index.ts | 2 +- packages/math/useFixed/index.md | 28 ------------------- .../math/{useFixed => useToFixed}/demo.vue | 4 +-- packages/math/useToFixed/index.md | 28 +++++++++++++++++++ .../{useFixed => useToFixed}/index.test.ts | 16 +++++------ .../math/{useFixed => useToFixed}/index.ts | 4 +-- 6 files changed, 41 insertions(+), 41 deletions(-) delete mode 100644 packages/math/useFixed/index.md rename packages/math/{useFixed => useToFixed}/demo.vue (91%) create mode 100644 packages/math/useToFixed/index.md rename packages/math/{useFixed => useToFixed}/index.test.ts (75%) rename packages/math/{useFixed => useToFixed}/index.ts (93%) diff --git a/packages/math/index.ts b/packages/math/index.ts index ad66fd058fc..99040945ffc 100644 --- a/packages/math/index.ts +++ b/packages/math/index.ts @@ -7,7 +7,7 @@ export * from './useAbs' export * from './useAverage' export * from './useCeil' export * from './useClamp' -export * from './useFixed' +export * from './useToFixed' export * from './useFloor' export * from './useMath' export * from './useMax' diff --git a/packages/math/useFixed/index.md b/packages/math/useFixed/index.md deleted file mode 100644 index 23dc0d202fc..00000000000 --- a/packages/math/useFixed/index.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -category: '@Math' ---- - -# useFloor - -Reactive `toFixed`. - -## Usage - -```ts -import { useFixed } from '@vueuse/math' - -const value = ref(3.1415) -const result = useFixed(value, 2) // 3.14 - -const stringResult = useFixed(value, 5, { - type: 'string' -}) // '3.14150' - -const ceilResult = useFixed(value, 2, { - math: 'ceil' -}) // 3.15 - -const floorResult = useFixed(value, 3, { - math: 'floor' -}) // 3.141 -``` diff --git a/packages/math/useFixed/demo.vue b/packages/math/useToFixed/demo.vue similarity index 91% rename from packages/math/useFixed/demo.vue rename to packages/math/useToFixed/demo.vue index ea784e63214..7f85ceb2f36 100644 --- a/packages/math/useFixed/demo.vue +++ b/packages/math/useToFixed/demo.vue @@ -1,6 +1,6 @@