UNPKG

@supunlakmal/hooks

Version:

A collection of reusable React hooks

51 lines 1.94 kB
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