From 53f4a8a68d33bfd2f73caf47f634c768d64d0411 Mon Sep 17 00:00:00 2001 From: Ayaka Rizumu <464388324@qq.com> Date: Sun, 17 Jul 2022 15:06:02 +0800 Subject: [PATCH] feat(useAbs): new function (#1825) Co-authored-by: Anthony Fu --- packages/math/useAbs/index.md | 16 ++++++++++++ packages/math/useAbs/index.test.ts | 40 ++++++++++++++++++++++++++++++ packages/math/useAbs/index.ts | 13 ++++++++++ 3 files changed, 69 insertions(+) create mode 100644 packages/math/useAbs/index.md create mode 100644 packages/math/useAbs/index.test.ts create mode 100644 packages/math/useAbs/index.ts diff --git a/packages/math/useAbs/index.md b/packages/math/useAbs/index.md new file mode 100644 index 00000000000..a31eb7d590b --- /dev/null +++ b/packages/math/useAbs/index.md @@ -0,0 +1,16 @@ +--- +category: '@Math' +--- + +# useAbs + +Reactive `Math.abs`. + +## Usage + +```ts +import { useAbs } from '@vueuse/math' + +const value = ref(-23) +const absValue = useAbs(value) // Ref<23> +``` diff --git a/packages/math/useAbs/index.test.ts b/packages/math/useAbs/index.test.ts new file mode 100644 index 00000000000..1f884b3d769 --- /dev/null +++ b/packages/math/useAbs/index.test.ts @@ -0,0 +1,40 @@ +import { ref } from 'vue-demi' +import { useAbs } from '.' + +describe('useAbs', () => { + test('should be defined', () => { + expect(useAbs).toBeDefined() + }) + + test('this should work', () => { + const original = ref(-1) + const abs = useAbs(original) + + expect(abs.value).toBe(1) + + original.value = -23 + expect(abs.value).toBe(23) + + original.value = 10 + expect(abs.value).toBe(10) + + original.value = 0 + expect(abs.value).toBe(0) + }) + + test('getter', () => { + const original = ref(-1) + const abs = useAbs(() => original.value) + + expect(abs.value).toBe(1) + + original.value = -23 + expect(abs.value).toBe(23) + + original.value = 10 + expect(abs.value).toBe(10) + + original.value = 0 + expect(abs.value).toBe(0) + }) +}) diff --git a/packages/math/useAbs/index.ts b/packages/math/useAbs/index.ts new file mode 100644 index 00000000000..6333d5c3eea --- /dev/null +++ b/packages/math/useAbs/index.ts @@ -0,0 +1,13 @@ +import type { MaybeComputedRef } from '@vueuse/shared' +import { resolveUnref } from '@vueuse/shared' +import type { ComputedRef } from 'vue-demi' +import { computed } from 'vue-demi' + +/** + * Reactive `Math.abs`. + * + * @see https://vueuse.org/useAbs + */ +export function useAbs(value: MaybeComputedRef): ComputedRef { + return computed(() => Math.abs(resolveUnref(value))) +}