From 171c5cfea473611d0c1ab1ab131c230108847d09 Mon Sep 17 00:00:00 2001 From: Caleb Chiam Date: Tue, 15 Apr 2025 21:59:05 +0800 Subject: [PATCH 1/6] fix: should check for null --- src/use-wake-lock.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/use-wake-lock.ts b/src/use-wake-lock.ts index 6199420..5bd9861 100644 --- a/src/use-wake-lock.ts +++ b/src/use-wake-lock.ts @@ -73,7 +73,7 @@ export const useWakeLock = ({ React.useEffect(() => { if (reacquireOnPageVisible) { const handleVisibilityChange = async () => { - if (wakeLock.current && document.visibilityState === 'visible') { + if (wakeLock.current == null && document.visibilityState === 'visible') { try { wakeLock.current = await navigator.wakeLock.request('screen'); } catch (error: any) { From da63cd9094b04c9eed053e8130aace32d31b387d Mon Sep 17 00:00:00 2001 From: Caleb Chiam Date: Tue, 15 Apr 2025 22:01:07 +0800 Subject: [PATCH 2/6] chore: add test case --- test/use-wake-lock.test.tsx | 40 +++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/test/use-wake-lock.test.tsx b/test/use-wake-lock.test.tsx index d6b49f8..1e32482 100644 --- a/test/use-wake-lock.test.tsx +++ b/test/use-wake-lock.test.tsx @@ -205,3 +205,43 @@ test('useWakeLock reacquires wake lock on page visibility change when `reacquire expect(result.current.released).toBe(false); expect(handleError).not.toHaveBeenCalled(); }); + +test('after releasing, useWakeLock reacquires wake lock on page visibility change when `reacquireOnPageVisible` is true', async () => { + const handleError = jest.fn(); + const { result } = renderHook(() => useWakeLock({ reacquireOnPageVisible: true, onError: handleError })); + + await act(async () => { + await result.current.request(); + }); + + expect(window.navigator.wakeLock.request).toHaveBeenCalledTimes(1); + expect(result.current.type).toEqual('screen'); + expect(result.current.released).toBe(false); + + await act(async () => { + await result.current.release(); + }); + + expect(result.current.released).toBe(true); + + // Mock document.visibilityState to 'hidden' + Object.defineProperty(document, 'visibilityState', { + value: 'hidden', + configurable: true, + }); + document.dispatchEvent(new Event('visibilitychange')); + + // Mock document.visibilityState to 'visible' + Object.defineProperty(document, 'visibilityState', { + value: 'visible', + configurable: true, + }); + await act(async () => { + document.dispatchEvent(new Event('visibilitychange')); + }); + + expect(window.navigator.wakeLock.request).toHaveBeenCalledTimes(2); + expect(result.current.type).toEqual('screen'); + expect(result.current.released).toBe(false); + expect(handleError).not.toHaveBeenCalled(); +}); \ No newline at end of file From 0c245aaceff01b76cd69e6cfec03dc1b9d25e200 Mon Sep 17 00:00:00 2001 From: Caleb Chiam Date: Tue, 15 Apr 2025 22:54:57 +0800 Subject: [PATCH 3/6] chore: drop old test --- test/use-wake-lock.test.tsx | 34 ---------------------------------- 1 file changed, 34 deletions(-) diff --git a/test/use-wake-lock.test.tsx b/test/use-wake-lock.test.tsx index 1e32482..df1d351 100644 --- a/test/use-wake-lock.test.tsx +++ b/test/use-wake-lock.test.tsx @@ -172,40 +172,6 @@ test('useWakeLock should call `onRelease` when wakeLockSentinel is released', as expect(handleRelease).toHaveBeenCalledWith(expect.any(Event)); }); -test('useWakeLock reacquires wake lock on page visibility change when `reacquireOnPageVisible` is true', async () => { - const handleError = jest.fn(); - const { result } = renderHook(() => useWakeLock({ reacquireOnPageVisible: true, onError: handleError })); - - await act(async () => { - await result.current.request(); - }); - - expect(window.navigator.wakeLock.request).toHaveBeenCalledTimes(1); - expect(result.current.type).toEqual('screen'); - expect(result.current.released).toBe(false); - - // Mock document.visibilityState to 'hidden' - Object.defineProperty(document, 'visibilityState', { - value: 'hidden', - configurable: true, - }); - document.dispatchEvent(new Event('visibilitychange')); - - // Mock document.visibilityState to 'visible' - Object.defineProperty(document, 'visibilityState', { - value: 'visible', - configurable: true, - }); - await act(async () => { - document.dispatchEvent(new Event('visibilitychange')); - }); - - expect(window.navigator.wakeLock.request).toHaveBeenCalledTimes(2); - expect(result.current.type).toEqual('screen'); - expect(result.current.released).toBe(false); - expect(handleError).not.toHaveBeenCalled(); -}); - test('after releasing, useWakeLock reacquires wake lock on page visibility change when `reacquireOnPageVisible` is true', async () => { const handleError = jest.fn(); const { result } = renderHook(() => useWakeLock({ reacquireOnPageVisible: true, onError: handleError })); From e92cef3d1c7148a2e18ac0f8cf40ba772e613318 Mon Sep 17 00:00:00 2001 From: Caleb Chiam Date: Tue, 15 Apr 2025 22:56:53 +0800 Subject: [PATCH 4/6] fix: === is more idiomatic --- src/use-wake-lock.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/use-wake-lock.ts b/src/use-wake-lock.ts index 5bd9861..fdf4a7f 100644 --- a/src/use-wake-lock.ts +++ b/src/use-wake-lock.ts @@ -56,7 +56,7 @@ export const useWakeLock = ({ ); const release = React.useCallback(async () => { - const isWakeLockUndefined = wakeLock.current == null; + const isWakeLockUndefined = wakeLock.current === null; if (!isSupported) { return warn( "Calling the `release` function has no effect, Wake Lock Screen API isn't supported" @@ -73,7 +73,7 @@ export const useWakeLock = ({ React.useEffect(() => { if (reacquireOnPageVisible) { const handleVisibilityChange = async () => { - if (wakeLock.current == null && document.visibilityState === 'visible') { + if (wakeLock.current === null && document.visibilityState === 'visible') { try { wakeLock.current = await navigator.wakeLock.request('screen'); } catch (error: any) { From 20263efcaecf0a95b45fa6096fbdc25cd01723ae Mon Sep 17 00:00:00 2001 From: Caleb Chiam Date: Tue, 15 Apr 2025 23:34:42 +0800 Subject: [PATCH 5/6] fix: use request --- src/use-wake-lock.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/use-wake-lock.ts b/src/use-wake-lock.ts index fdf4a7f..33d982d 100644 --- a/src/use-wake-lock.ts +++ b/src/use-wake-lock.ts @@ -75,7 +75,7 @@ export const useWakeLock = ({ const handleVisibilityChange = async () => { if (wakeLock.current === null && document.visibilityState === 'visible') { try { - wakeLock.current = await navigator.wakeLock.request('screen'); + await request(); } catch (error: any) { onError?.(error); } From 394aa64238ae03b501027093550810dccb468848 Mon Sep 17 00:00:00 2001 From: Caleb Chiam Date: Tue, 15 Apr 2025 23:45:42 +0800 Subject: [PATCH 6/6] chore: update deps --- src/use-wake-lock.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/use-wake-lock.ts b/src/use-wake-lock.ts index 33d982d..0feb2dc 100644 --- a/src/use-wake-lock.ts +++ b/src/use-wake-lock.ts @@ -88,7 +88,7 @@ export const useWakeLock = ({ }; } return undefined; - }, [reacquireOnPageVisible, onError]); + }, [reacquireOnPageVisible, request, onError]); return { isSupported,