Skip to content

Commit 227d277

Browse files
authored
fix: reacquire wake lock check after release (#280)
* fix: should check for null * chore: add test case * chore: drop old test * fix: === is more idiomatic * fix: use request * chore: update deps
1 parent 691f1fc commit 227d277

File tree

2 files changed

+12
-6
lines changed

2 files changed

+12
-6
lines changed

src/use-wake-lock.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ export const useWakeLock = ({
5656
);
5757

5858
const release = React.useCallback(async () => {
59-
const isWakeLockUndefined = wakeLock.current == null;
59+
const isWakeLockUndefined = wakeLock.current === null;
6060
if (!isSupported) {
6161
return warn(
6262
"Calling the `release` function has no effect, Wake Lock Screen API isn't supported"
@@ -73,9 +73,9 @@ export const useWakeLock = ({
7373
React.useEffect(() => {
7474
if (reacquireOnPageVisible) {
7575
const handleVisibilityChange = async () => {
76-
if (wakeLock.current && document.visibilityState === 'visible') {
76+
if (wakeLock.current === null && document.visibilityState === 'visible') {
7777
try {
78-
wakeLock.current = await navigator.wakeLock.request('screen');
78+
await request();
7979
} catch (error: any) {
8080
onError?.(error);
8181
}
@@ -88,7 +88,7 @@ export const useWakeLock = ({
8888
};
8989
}
9090
return undefined;
91-
}, [reacquireOnPageVisible, onError]);
91+
}, [reacquireOnPageVisible, request, onError]);
9292

9393
return {
9494
isSupported,

test/use-wake-lock.test.tsx

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ test('useWakeLock should call `onRelease` when wakeLockSentinel is released', as
172172
expect(handleRelease).toHaveBeenCalledWith(expect.any(Event));
173173
});
174174

175-
test('useWakeLock reacquires wake lock on page visibility change when `reacquireOnPageVisible` is true', async () => {
175+
test('after releasing, useWakeLock reacquires wake lock on page visibility change when `reacquireOnPageVisible` is true', async () => {
176176
const handleError = jest.fn();
177177
const { result } = renderHook(() => useWakeLock({ reacquireOnPageVisible: true, onError: handleError }));
178178

@@ -184,6 +184,12 @@ test('useWakeLock reacquires wake lock on page visibility change when `reacquire
184184
expect(result.current.type).toEqual('screen');
185185
expect(result.current.released).toBe(false);
186186

187+
await act(async () => {
188+
await result.current.release();
189+
});
190+
191+
expect(result.current.released).toBe(true);
192+
187193
// Mock document.visibilityState to 'hidden'
188194
Object.defineProperty(document, 'visibilityState', {
189195
value: 'hidden',
@@ -204,4 +210,4 @@ test('useWakeLock reacquires wake lock on page visibility change when `reacquire
204210
expect(result.current.type).toEqual('screen');
205211
expect(result.current.released).toBe(false);
206212
expect(handleError).not.toHaveBeenCalled();
207-
});
213+
});

0 commit comments

Comments
 (0)