From cf29c4cff3cc1a24751e41b95af5fc61d086434c Mon Sep 17 00:00:00 2001 From: leewakin <103585517+leewakin@users.noreply.github.com> Date: Tue, 20 Feb 2024 17:58:53 +0800 Subject: [PATCH] fix(useCounter): allow `delta` to be negative (#3650) Co-authored-by: Doctorwu <44631608+Doctor-wu@users.noreply.github.com> Co-authored-by: Anthony Fu --- packages/shared/useCounter/index.test.ts | 14 +++++++++++++- packages/shared/useCounter/index.ts | 4 ++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/packages/shared/useCounter/index.test.ts b/packages/shared/useCounter/index.test.ts index c3229d79c8a..5c37d183505 100644 --- a/packages/shared/useCounter/index.test.ts +++ b/packages/shared/useCounter/index.test.ts @@ -18,10 +18,16 @@ describe('useCounter', () => { inc(2) expect(count.value).toBe(3) expect(get()).toBe(3) - dec() + inc(-1) expect(count.value).toBe(2) expect(get()).toBe(2) + dec() + expect(count.value).toBe(1) + expect(get()).toBe(1) dec(5) + expect(count.value).toBe(-4) + expect(get()).toBe(-4) + dec(-1) expect(count.value).toBe(-3) expect(get()).toBe(-3) set(100) @@ -87,6 +93,12 @@ describe('useCounter', () => { inc(20) expect(count.value).toBe(15) expect(get()).toBe(15) + inc(-20) + expect(count.value).toBe(-2) + expect(get()).toBe(-2) + dec(-20) + expect(count.value).toBe(15) + expect(get()).toBe(15) dec(2) expect(count.value).toBe(13) expect(get()).toBe(13) diff --git a/packages/shared/useCounter/index.ts b/packages/shared/useCounter/index.ts index 6718e28d678..bac44647595 100644 --- a/packages/shared/useCounter/index.ts +++ b/packages/shared/useCounter/index.ts @@ -24,8 +24,8 @@ export function useCounter(initialValue: MaybeRef = 0, options: UseCount min = Number.NEGATIVE_INFINITY, } = options - const inc = (delta = 1) => count.value = Math.min(max, count.value + delta) - const dec = (delta = 1) => count.value = Math.max(min, count.value - delta) + const inc = (delta = 1) => count.value = Math.max(Math.min(max, count.value + delta), min) + const dec = (delta = 1) => count.value = Math.min(Math.max(min, count.value - delta), max) const get = () => count.value const set = (val: number) => (count.value = Math.max(min, Math.min(max, val))) const reset = (val = _initialValue) => {