From e7f79e5421884ab9df94deb6c7ab3225ed43f503 Mon Sep 17 00:00:00 2001 From: Rock070 Date: Sat, 29 Jul 2023 02:50:49 +0800 Subject: [PATCH 1/3] feat(useCounter): support MaybeRef --- packages/shared/useCounter/index.test.ts | 42 ++++++++++++++++++++++++ packages/shared/useCounter/index.ts | 13 +++++--- 2 files changed, 50 insertions(+), 5 deletions(-) diff --git a/packages/shared/useCounter/index.test.ts b/packages/shared/useCounter/index.test.ts index e97abf42af2..c3229d79c8a 100644 --- a/packages/shared/useCounter/index.test.ts +++ b/packages/shared/useCounter/index.test.ts @@ -1,4 +1,5 @@ import { describe, expect, it } from 'vitest' +import { ref } from 'vue-demi' import { useCounter } from '.' describe('useCounter', () => { @@ -37,6 +38,47 @@ describe('useCounter', () => { expect(get()).toBe(25) }) + it('should be update initial & counter', () => { + const initial = ref(0) + const { count, inc, dec, get, set, reset } = useCounter(initial) + + expect(count.value).toBe(0) + expect(initial.value).toBe(0) + expect(get()).toBe(0) + inc() + expect(initial.value).toBe(1) + expect(count.value).toBe(1) + expect(get()).toBe(1) + inc(2) + expect(count.value).toBe(3) + expect(initial.value).toBe(3) + expect(get()).toBe(3) + dec() + expect(count.value).toBe(2) + expect(initial.value).toBe(2) + expect(get()).toBe(2) + dec(5) + expect(count.value).toBe(-3) + expect(initial.value).toBe(-3) + expect(get()).toBe(-3) + set(100) + expect(count.value).toBe(100) + expect(initial.value).toBe(100) + expect(get()).toBe(100) + reset() + expect(count.value).toBe(0) + expect(initial.value).toBe(0) + expect(get()).toBe(0) + reset(25) + expect(count.value).toBe(25) + expect(initial.value).toBe(25) + expect(get()).toBe(25) + reset() + expect(count.value).toBe(25) + expect(initial.value).toBe(25) + expect(get()).toBe(25) + }) + it('should be update limited counter', () => { const { count, inc, dec, get, set, reset } = useCounter(1, { min: -2, max: 15 }) diff --git a/packages/shared/useCounter/index.ts b/packages/shared/useCounter/index.ts index 454ca61254b..11e0bde3390 100644 --- a/packages/shared/useCounter/index.ts +++ b/packages/shared/useCounter/index.ts @@ -1,4 +1,6 @@ -import { ref } from 'vue-demi' +import { toRef, toValue } from '../index' + +import type { MaybeRef } from '../index' export interface UseCounterOptions { min?: number @@ -12,8 +14,9 @@ export interface UseCounterOptions { * @param [initialValue=0] * @param {Object} options */ -export function useCounter(initialValue = 0, options: UseCounterOptions = {}) { - const count = ref(initialValue) +export function useCounter(initialValue: MaybeRef = 0, options: UseCounterOptions = {}) { + let _initialValue = toValue(initialValue) + const count = toRef(initialValue) const { max = Number.POSITIVE_INFINITY, @@ -24,8 +27,8 @@ export function useCounter(initialValue = 0, options: UseCounterOptions = {}) { const dec = (delta = 1) => count.value = Math.max(min, count.value - delta) const get = () => count.value const set = (val: number) => (count.value = Math.max(min, Math.min(max, val))) - const reset = (val = initialValue) => { - initialValue = val + const reset = (val = _initialValue) => { + _initialValue = val return set(val) } From 8f5689512a4c221bed27198199eaaf6ae9e70e46 Mon Sep 17 00:00:00 2001 From: Rock070 Date: Sat, 29 Jul 2023 02:55:55 +0800 Subject: [PATCH 2/3] fix: change import source --- packages/shared/useCounter/index.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/shared/useCounter/index.ts b/packages/shared/useCounter/index.ts index 11e0bde3390..816ef2f571f 100644 --- a/packages/shared/useCounter/index.ts +++ b/packages/shared/useCounter/index.ts @@ -1,6 +1,7 @@ -import { toRef, toValue } from '../index' +import { toRef } from '../toRef' +import { toValue } from '../toValue' -import type { MaybeRef } from '../index' +import type { MaybeRef } from '../utils/types' export interface UseCounterOptions { min?: number From 97e40bc82ad8dfc2458c2effea8ba64604e029ca Mon Sep 17 00:00:00 2001 From: Rock070 Date: Sat, 29 Jul 2023 14:45:50 +0800 Subject: [PATCH 3/3] refactor(useCounter): replace `toValue` & `toRef` by `unref` & `ref` --- packages/shared/useCounter/index.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/shared/useCounter/index.ts b/packages/shared/useCounter/index.ts index 816ef2f571f..efae9005e00 100644 --- a/packages/shared/useCounter/index.ts +++ b/packages/shared/useCounter/index.ts @@ -1,7 +1,7 @@ -import { toRef } from '../toRef' -import { toValue } from '../toValue' +// eslint-disable-next-line no-restricted-imports +import { ref, unref } from 'vue-demi' -import type { MaybeRef } from '../utils/types' +import type { MaybeRef } from 'vue-demi' export interface UseCounterOptions { min?: number @@ -16,8 +16,8 @@ export interface UseCounterOptions { * @param {Object} options */ export function useCounter(initialValue: MaybeRef = 0, options: UseCounterOptions = {}) { - let _initialValue = toValue(initialValue) - const count = toRef(initialValue) + let _initialValue = unref(initialValue) + const count = ref(initialValue) const { max = Number.POSITIVE_INFINITY,