From 1eac02c2c461ba730326cf96e8bba5104cd84434 Mon Sep 17 00:00:00 2001 From: Sai Asish Y Date: Mon, 5 Oct 2026 12:06:00 -0700 Subject: [PATCH] fix: ignore non-Date argument in useStopwatch reset Signed-off-by: Sai Asish Y --- __tests__/useStopwatch.test.ts | 20 ++++++++++++++++++++ src/useStopwatch.ts | 2 +- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/__tests__/useStopwatch.test.ts b/__tests__/useStopwatch.test.ts index e1ff9b6..646247f 100644 --- a/__tests__/useStopwatch.test.ts +++ b/__tests__/useStopwatch.test.ts @@ -404,5 +404,25 @@ describe('useStopwatch', () => { expect(result.current.isRunning).toBe(true); expect(result.current.seconds).toBe(5); }); + + test('calling reset directly as an event handler does not throw', () => { + const { result } = renderHook(() => + useStopwatch() + ); + + act(() => { jest.advanceTimersByTime(5000); }); + + expect(result.current.seconds).toBe(5); + + const clickEvent = { type: 'click', target: {} }; + act(() => (result.current.reset as (arg?: unknown) => void)(clickEvent)); + + expect(result.current.seconds).toBe(0); + + act(() => { jest.advanceTimersByTime(2000); }); + + expect(result.current.isRunning).toBe(true); + expect(result.current.seconds).toBe(2); + }); }); }); \ No newline at end of file diff --git a/src/useStopwatch.ts b/src/useStopwatch.ts index 13e3ecf..f3a83cd 100644 --- a/src/useStopwatch.ts +++ b/src/useStopwatch.ts @@ -46,7 +46,7 @@ export default function useStopwatch({ autoStart = true, offsetTimestamp, interv }, [prevTime, isRunning]); const reset = useCallback((offset?: Date, newAutoStart = true) => { - const newOffsetMilliseconds = offset ? Time.getMillisecondsFromExpiry(offset) : 0; + const newOffsetMilliseconds = offset instanceof Date ? Time.getMillisecondsFromExpiry(offset) : 0; const newPrevTime = new Date().getTime() - new Date(newOffsetMilliseconds).getTime(); const newMilliseconds = Time.getMillisecondsFromPrevTime(newPrevTime); const millisecondsOffset = SECOND_INTERVAL - (newMilliseconds % SECOND_INTERVAL);