diff --git a/src/use-wake-lock.ts b/src/use-wake-lock.ts index 6199420..0feb2dc 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,9 +73,9 @@ 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'); + await request(); } catch (error: any) { onError?.(error); } @@ -88,7 +88,7 @@ export const useWakeLock = ({ }; } return undefined; - }, [reacquireOnPageVisible, onError]); + }, [reacquireOnPageVisible, request, onError]); return { isSupported, diff --git a/test/use-wake-lock.test.tsx b/test/use-wake-lock.test.tsx index d6b49f8..df1d351 100644 --- a/test/use-wake-lock.test.tsx +++ b/test/use-wake-lock.test.tsx @@ -172,7 +172,7 @@ 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 () => { +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 })); @@ -184,6 +184,12 @@ test('useWakeLock reacquires wake lock on page visibility change when `reacquire 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', @@ -204,4 +210,4 @@ test('useWakeLock reacquires wake lock on page visibility change when `reacquire expect(result.current.type).toEqual('screen'); expect(result.current.released).toBe(false); expect(handleError).not.toHaveBeenCalled(); -}); +}); \ No newline at end of file