UNPKG

react-screen-wake-lock

Version:

React implementation of the Screen Wake Lock API. It provides a way to prevent devices from dimming or locking the screen when an application needs to keep running.

1 lines 5.65 kB
{"version":3,"file":"react-screen-wake-lock.cjs","sources":["../src/use-wake-lock.ts"],"sourcesContent":["import * as React from 'react';\n\nconst warn = (content: string) =>\n console.warn('[react-screen-wake-lock]: ' + content);\n\nexport interface WakeLockOptions {\n onError?: (error: Error) => void;\n onRequest?: () => void;\n onRelease?: EventListener;\n reacquireOnPageVisible?: boolean;\n}\n\nexport const useWakeLock = ({\n onError,\n onRequest,\n onRelease,\n reacquireOnPageVisible = false,\n}: WakeLockOptions | undefined = {}) => {\n const [released, setReleased] = React.useState<boolean | undefined>();\n const wakeLock = React.useRef<WakeLockSentinel | null>(null);\n\n // https://caniuse.com/mdn-api_wakelock\n const isSupported = typeof window !== 'undefined' && 'wakeLock' in navigator;\n\n const request = React.useCallback(\n async (type: WakeLockType = 'screen') => {\n const isWakeLockAlreadyDefined = wakeLock.current != null;\n if (!isSupported) {\n return warn(\n \"Calling the `request` function has no effect, Wake Lock Screen API isn't supported\"\n );\n }\n if (isWakeLockAlreadyDefined) {\n return warn(\n 'Calling `request` multiple times without `release` has no effect'\n );\n }\n\n try {\n wakeLock.current = await navigator.wakeLock.request(type);\n\n wakeLock.current.onrelease = (e: Event) => {\n // Default to `true` - `released` API is experimental: https://caniuse.com/mdn-api_wakelocksentinel_released\n setReleased((wakeLock.current && wakeLock.current.released) || true);\n onRelease && onRelease(e);\n wakeLock.current = null;\n };\n\n onRequest && onRequest();\n setReleased((wakeLock.current && wakeLock.current.released) || false);\n } catch (error: any) {\n onError && onError(error);\n }\n },\n [isSupported, onRequest, onError, onRelease]\n );\n\n const release = React.useCallback(async () => {\n const isWakeLockUndefined = wakeLock.current === null;\n if (!isSupported) {\n return warn(\n \"Calling the `release` function has no effect, Wake Lock Screen API isn't supported\"\n );\n }\n\n if (isWakeLockUndefined) {\n return warn('Calling `release` before `request` has no effect.');\n }\n\n wakeLock.current && (await wakeLock.current.release());\n }, [isSupported]);\n\n React.useEffect(() => {\n if (reacquireOnPageVisible) {\n const handleVisibilityChange = async () => {\n if (wakeLock.current === null && document.visibilityState === 'visible') {\n try {\n await request();\n } catch (error: any) {\n onError?.(error);\n }\n }\n };\n\n document.addEventListener('visibilitychange', handleVisibilityChange);\n return () => {\n document.removeEventListener('visibilitychange', handleVisibilityChange);\n };\n }\n return undefined;\n }, [reacquireOnPageVisible, request, onError]);\n\n return {\n isSupported,\n request,\n released,\n release,\n type: (wakeLock.current && wakeLock.current.type) || undefined,\n };\n};\n"],"names":["warn","content","console","_temp","_ref","onError","onRequest","onRelease","_ref$reacquireOnPageV","reacquireOnPageVisible","_React$useState","React","useState","released","setReleased","wakeLock","useRef","isSupported","window","navigator","request","useCallback","type","isWakeLockAlreadyDefined","current","Promise","resolve","_temp2","_catch","then","_navigator$wakeLock$r","onrelease","e","error","reject","release","_wakeLock$current$rel","_temp3","useEffect","handleVisibilityChange","_temp5","document","visibilityState","_temp4","addEventListener","removeEventListener","undefined"],"mappings":"4YAEA,IAAMA,EAAO,SAACC,GAAe,OAC3BC,QAAQF,KAAK,6BAA+BC,EAAQ,sBAS3B,SAAHE,GAKeC,IAAAA,WAAAD,EAAN,CAAE,EAAAA,EAJjCE,EAAOD,EAAPC,QACAC,EAASF,EAATE,UACAC,EAASH,EAATG,UAASC,EAAAJ,EACTK,uBAAAA,OAAyB,IAAHD,GAAQA,EAE9BE,EAAgCC,EAAMC,WAA/BC,EAAQH,KAAEI,EAAWJ,EAAA,GACtBK,EAAWJ,EAAMK,OAAgC,MAGjDC,EAAgC,oBAAXC,QAA0B,aAAcC,UAE7DC,EAAUT,EAAMU,YACbC,SAAAA,QAAA,IAAAA,IAAAA,EAAqB,UAAY,IACtC,IAAMC,EAA+C,MAApBR,EAASS,QAC1C,IAAKP,EACH,OAAAQ,QAAAC,QAAO1B,EACL,uFAGJ,GAAIuB,EACF,OAAAE,QAAAC,QAAO1B,EACL,qEAEH,IAAA2B,EAAAC,EAEG,WAAA,OAAAH,QAAAC,QACuBP,UAAUJ,SAASK,QAAQE,IAAKO,KAAA,SAAAC,GAAzDf,EAASS,QAAOM,EAEhBf,EAASS,QAAQO,UAAY,SAACC,GAE5BlB,EAAaC,EAASS,SAAWT,EAASS,QAAQX,WAAa,GAC/DN,GAAaA,EAAUyB,GACvBjB,EAASS,QAAU,IACrB,EAEAlB,GAAaA,IACbQ,EAAaC,EAASS,SAAWT,EAASS,QAAQX,WAAa,EAAO,EACxE,EAASoB,SAAAA,GACP5B,GAAWA,EAAQ4B,EACrB,GAAC,OAAAR,QAAAC,QAAAC,GAAAA,EAAAE,KAAAF,EAAAE,KACH,WAAA,QAAA,EAAA,CAAC,MAAAG,GAAA,OAAAP,QAAAS,OAAAF,EACD,CAAA,EAAA,CAACf,EAAaX,EAAWD,EAASE,IAG9B4B,EAAUxB,EAAMU,YAAW,WAAA,IAE/B,OAOEI,QAAAC,QAPGT,EAD4C,OAArBF,EAASS,QAQ5BxB,EAAK,qDAGde,EAASS,QAAOC,QAAAC,QAAWX,EAASS,QAAQW,WAASN,cAZVO,GAYY,QAAFC,EAT5CrC,EACL,sFASN,CAAC,MAAAgC,GAAAP,OAAAA,QAAAS,OAAAF,EAAA,CAAA,EAAE,CAACf,IAsBJ,OApBAN,EAAM2B,UAAU,WACd,GAAI7B,EAAwB,CAC1B,IAAM8B,EAAsB,WAAc,IAAA,IAAAC,EAAA,WAAA,GACf,OAArBzB,EAASS,SAAiD,YAA7BiB,SAASC,gBAA6BC,CAAAA,IAAAA,EAAAf,aACjEH,OAAAA,QAAAC,QACIN,KAASS,KACjB,aAAA,EAASI,SAAAA,GACP5B,MAAAA,GAAAA,EAAU4B,EACZ,GAAC,GAAAU,GAAAA,EAAAd,YAAAc,EAAAd,KAAA,WAAA,EAAA,CAAA,CANqC,GAMrC,OAAAJ,QAAAC,QAAAc,GAAAA,EAAAX,KAAAW,EAAAX,KAEL,WAAA,QAAA,EAAA,CAAC,MAAAG,GAAA,OAAAP,QAAAS,OAAAF,EAEDS,CAAAA,EACA,OADAA,SAASG,iBAAiB,mBAAoBL,GACvC,WACLE,SAASI,oBAAoB,mBAAoBN,EACnD,CACF,CAEF,EAAG,CAAC9B,EAAwBW,EAASf,IAE9B,CACLY,YAAAA,EACAG,QAAAA,EACAP,SAAAA,EACAsB,QAAAA,EACAb,KAAOP,EAASS,SAAWT,EAASS,QAAQF,WAASwB,EAEzD"}