UNPKG

react-use-wake-lock

Version:

React hooks to make it easier to use Screen Wake Lock API

2 lines (1 loc) 2.01 kB
(function(e,l){typeof exports=="object"&&typeof module<"u"?module.exports=l(require("react")):typeof define=="function"&&define.amd?define(["react"],l):(e=typeof globalThis<"u"?globalThis:e||self,e.ReactUseWakeLock=l(e.React))})(this,function(e){"use strict";function l(){const[a,f]=e.useState(document.visibilityState==="visible"),o=e.useCallback(()=>{f(document.visibilityState==="visible")},[]);return e.useEffect(()=>(document.addEventListener("visibilitychange",o),()=>{document.removeEventListener("visibilitychange",o)}),[o]),a}function c(a){console.warn(`[react-use-wake-lock]: ${a}`)}function h(a){const f=l(),[o,y]=e.useState(!1),d=e.useRef(!1),b=e.useRef(!1),[r,E]=e.useState(null),s="wakeLock"in navigator,i=e.useRef(a),u=e.useCallback((n,t)=>{var w;((w=i.current)==null?void 0:w.onError)!=null&&i.current.onError(n,t)},[]),p=e.useCallback(n=>{var t;((t=i.current)==null?void 0:t.onLock)!=null&&i.current.onLock(n)},[]),L=e.useCallback(n=>{var t;((t=i.current)==null?void 0:t.onRelease)!=null&&i.current.onRelease(n)},[]),k=e.useCallback(async()=>{if(!s){c("WakeLock is not supported by the browser");return}if(d.current===!0){c("WakeLock request is in progress. noop");return}if(r!=null&&r.released===!1){c("Already have a lock. noop");return}b.current=!1;try{d.current=!0;const n=await navigator.wakeLock.request("screen");n.addEventListener("release",()=>{y(!1),L(n)}),E(n),y(!0),p(n)}catch(n){n instanceof Error?u(n,"request"):u(new Error("Unknown error type on request"),"request")}finally{d.current=!1}},[s,r,p,L,u]),v=e.useCallback(async()=>{if(!s){c("WakeLock is not supported by the browser");return}if(r==null){c("Trying to release lock without having one: noop");return}try{b.current=!0,await r.release()}catch(n){n instanceof Error?u(n,"release"):u(new Error("Unknown error type on release"),"release")}},[s,r,u]);return e.useEffect(()=>{s&&r!=null&&f&&r.released&&b.current!==!0&&k()},[s,f,r,k]),e.useMemo(()=>({isSupported:s,isLocked:o,request:k,release:v}),[o,s,v,k])}return h});