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.
3 lines (2 loc) • 2.56 kB
JavaScript
!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("react")):"function"==typeof define&&define.amd?define(["exports","react"],r):r((e||self).reactScreenWakeLock={},e.react)}(this,function(e,r){function n(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach(function(n){if("default"!==n){var t=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(r,n,t.get?t:{enumerable:!0,get:function(){return e[n]}})}}),r.default=e,r}var t=/*#__PURE__*/n(r);function o(e,r){try{var n=e()}catch(e){return r(e)}return n&&n.then?n.then(void 0,r):n}var i=function(e){return console.warn("[react-screen-wake-lock]: "+e)};e.useWakeLock=function(e){var r=void 0===e?{}:e,n=r.onError,u=r.onRequest,c=r.onRelease,s=r.reacquireOnPageVisible,a=void 0!==s&&s,f=t.useState(),l=f[0],v=f[1],d=t.useRef(null),h="undefined"!=typeof window&&"wakeLock"in navigator,m=t.useCallback(function(e){void 0===e&&(e="screen");try{var r=null!=d.current;if(!h)return Promise.resolve(i("Calling the `request` function has no effect, Wake Lock Screen API isn't supported"));if(r)return Promise.resolve(i("Calling `request` multiple times without `release` has no effect"));var t=o(function(){return Promise.resolve(navigator.wakeLock.request(e)).then(function(e){d.current=e,d.current.onrelease=function(e){v(d.current&&d.current.released||!0),c&&c(e),d.current=null},u&&u(),v(d.current&&d.current.released||!1)})},function(e){n&&n(e)});return Promise.resolve(t&&t.then?t.then(function(){}):void 0)}catch(e){return Promise.reject(e)}},[h,u,n,c]),p=t.useCallback(function(){try{return Promise.resolve(h?null===d.current?i("Calling `release` before `request` has no effect."):d.current?Promise.resolve(d.current.release()).then(function(e){}):void 0:i("Calling the `release` function has no effect, Wake Lock Screen API isn't supported"))}catch(e){return Promise.reject(e)}},[h]);return t.useEffect(function(){if(a){var e=function(){try{var e=function(){if(null===d.current&&"visible"===document.visibilityState){var e=o(function(){return Promise.resolve(m()).then(function(){})},function(e){null==n||n(e)});if(e&&e.then)return e.then(function(){})}}();return Promise.resolve(e&&e.then?e.then(function(){}):void 0)}catch(e){return Promise.reject(e)}};return document.addEventListener("visibilitychange",e),function(){document.removeEventListener("visibilitychange",e)}}},[a,m,n]),{isSupported:h,request:m,released:l,release:p,type:d.current&&d.current.type||void 0}}});
//# sourceMappingURL=react-screen-wake-lock.umd.js.map