react-lock-screen
Version:
Simple lock-screen for idle React applications
2 lines (1 loc) • 1.32 kB
JavaScript
import e,{useState as r,useRef as n,useEffect as t,Fragment as o}from"react";import c from"react-idle-timer";import i from"prop-types";function u(e,r){return function(e){if(Array.isArray(e))return e}(e)||function(e,r){if(!(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)))return;var n=[],t=!0,o=!1,c=void 0;try{for(var i,u=e[Symbol.iterator]();!(t=(i=u.next()).done)&&(n.push(i.value),!r||n.length!==r);t=!0);}catch(e){o=!0,c=e}finally{try{t||null==u.return||u.return()}finally{if(o)throw c}}return n}(e,r)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function l(i){var l=u(r(!1),2),a=l[0],f=l[1],m=n(0);t((function(){m.current?a?i.onScreenLocked():i.onScreenUnlocked():m.current=1}),[a]);return e.createElement(o,null,e.createElement(c,{onIdle:function(){a||f(!a)},timeout:i.timeout}),e.createElement("div",{style:a&&!i.className?{filter:"blur(4px)",userSelect:"none",height:"100vh",overflow:"hidden"}:{},className:"react-lock-screen ".concat(a?i.className:"")},i.children),function(){if(a)return i.ui(f)}())}l.defaultProps={onScreenLocked:function(){},onScreenUnlocked:function(){}},l.propTypes={timeout:i.number.isRequired,ui:i.func.isRequired,className:i.string,onScreenLocked:i.func,onScreenUnlocked:i.func};export default l;