react-use-konami
Version:
react hook that adds konami code to your component
2 lines (1 loc) • 1.27 kB
JavaScript
;var ReducerAction,react=require("react"),__assign=function(){return(__assign=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(var i in t=arguments[r])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e}).apply(this,arguments)};!function(e){e.KeyUp="KEY_UP",e.Reset="RESET"}(ReducerAction||(ReducerAction={}));var initialState=function(e){return void 0===e&&(e=["ArrowUp","ArrowUp","ArrowDown","ArrowDown","ArrowLeft","ArrowRight","ArrowLeft","ArrowRight","b","a","Enter"]),{success:!1,code:e,initialCode:e}},konamiReducer=function(e,t){switch(t.type){case ReducerAction.KeyUp:if(e.success)return e;if(e.code[0]!==t.payload)return initialState(e.initialCode);var r=e.code.slice(1);return __assign({},e,{success:0===r.length,code:r});case ReducerAction.Reset:return initialState(e.initialCode);default:return e}},useKonami=function(e,t){var r=react.useReducer(konamiReducer,initialState(t&&t.code)),n=r[0],i=r[1];react.useEffect(function(){var e=function(e){return i({type:ReducerAction.KeyUp,payload:e.key})};return window.addEventListener("keyup",e),function(){return window.removeEventListener("keyup",e)}},[]),react.useEffect(function(){n.success&&(e(),i({type:ReducerAction.Reset}))},[n,e])};module.exports=useKonami;