Skip to content

Commit 1d5eeec

Browse files
authored
fix non-working loop when lowerLimit equals 0 (#78)
1 parent 7e0649d commit 1d5eeec

2 files changed

Lines changed: 41 additions & 3 deletions

File tree

src/array/useNumber.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,17 +51,22 @@ export function useNumber(
5151

5252
if (upperLimit !== undefined) {
5353
if (nextValue > upperLimit) {
54-
if (loop && lowerLimit) {
55-
return lowerLimit;
54+
if (loop) {
55+
if (lowerLimit !== undefined) {
56+
return lowerLimit;
57+
}
58+
59+
return initial;
5660
}
61+
5762
return upperLimit;
5863
}
5964
}
6065

6166
return nextValue;
6267
});
6368
},
64-
[loop, step, upperLimit, lowerLimit],
69+
[step, upperLimit, loop, lowerLimit, initial],
6570
);
6671
const actions = useMemo(
6772
() => ({

src/index.test.ts

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,39 @@ describe('useNumber', () => {
131131
expect(result.current.value).toBe(3);
132132
});
133133

134+
describe('loop mode', () => {
135+
it('should go to lowerLimit value after increase reaching upperLimit', () => {
136+
// given
137+
const { result } = renderHook(() => useNumber(4, { loop: true, upperLimit: 5, lowerLimit: 0 }));
138+
const { increase } = result.current;
139+
// when
140+
act(() => increase());
141+
act(() => increase());
142+
// then
143+
expect(result.current.value).toBe(0);
144+
});
145+
it('should go to initial value if no lowerLimit presented after increase reaching upperLimit', () => {
146+
// given
147+
const { result } = renderHook(() => useNumber(4, { loop: true, upperLimit: 5 }));
148+
const { increase } = result.current;
149+
// when
150+
act(() => increase());
151+
act(() => increase());
152+
// then
153+
expect(result.current.value).toBe(4);
154+
});
155+
it('should stay on upperLimit after increase reaching its value if loop equals false', () => {
156+
// given
157+
const { result } = renderHook(() => useNumber(4, { loop: false, upperLimit: 5 }));
158+
const { increase } = result.current;
159+
// when
160+
act(() => increase());
161+
act(() => increase());
162+
// then
163+
expect(result.current.value).toBe(5);
164+
});
165+
});
166+
134167
describe('hooks optimizations', () => {
135168
it('should keep actions reference equality after value change', () => {
136169
// given

0 commit comments

Comments
 (0)