@supunlakmal/hooks
Version:
A collection of reusable React hooks
51 lines • 1.94 kB
JavaScript
import { useState, useEffect, useCallback } from 'react';
export const useWakeLock = () => {
const [wakeLockState, setWakeLockState] = useState({
isSupported: 'wakeLock' in navigator,
isActive: false,
});
const [wakeLock, setWakeLock] = useState(null);
const acquire = useCallback(async () => {
if (!wakeLockState.isSupported) {
console.warn('Wake Lock API not supported');
return;
}
try {
const newWakeLock = await navigator.wakeLock.request('screen');
setWakeLock(newWakeLock);
setWakeLockState((prevState) => (Object.assign(Object.assign({}, prevState), { isActive: true })));
newWakeLock.onrelease = () => {
setWakeLockState((prevState) => (Object.assign(Object.assign({}, prevState), { isActive: false })));
};
}
catch (err) {
console.error('Could not acquire wake lock:', err);
}
}, [wakeLockState.isSupported]);
const release = useCallback(async () => {
if (wakeLock) {
try {
await wakeLock.release();
}
catch (err) {
console.error('Could not release wake lock:', err);
}
}
}, [wakeLock]);
useEffect(() => {
const handleVisibilityChange = async () => {
if (wakeLockState.isActive && document.visibilityState === 'visible') {
await acquire();
}
};
document.addEventListener('visibilitychange', handleVisibilityChange);
return () => {
document.removeEventListener('visibilitychange', handleVisibilityChange);
if (wakeLockState.isActive) {
release();
}
};
}, [wakeLockState.isActive, acquire, release]);
return [acquire, release, wakeLockState];
};
//# sourceMappingURL=useWakeLock.js.map