tele-state
Version:
shared state with react hooks
1 lines • 1.53 kB
JavaScript
var __assign=this&&this.__assign||function(){return(__assign=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(var u in t=arguments[r])Object.prototype.hasOwnProperty.call(t,u)&&(e[u]=t[u]);return e}).apply(this,arguments)},__rest=this&&this.__rest||function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var u=0;for(n=Object.getOwnPropertySymbols(e);u<n.length;u++)t.indexOf(n[u])<0&&Object.prototype.propertyIsEnumerable.call(e,n[u])&&(r[n[u]]=e[n[u]])}return r};import{useState,useMemo,useRef,useEffect}from"react";import{TeleState}from"./tele-state";var stateId=0,useTele=function(e){var t=useState(e.value)[1],r=useRef(useMemo((function(){return stateId++}),[]));return e.setStateMap[r.current]=t,useEffect((function(){return function(){delete e.setStateMap[r.current]}}),[]),[e.value,e.dispatch]};export var createTeleReducers=function(e,t){return createTeleReducer((function(t,r){return e[r.type](t,r.payLoad)}),t)};var createTeleReducer=function(e,t){var r=new TeleState(t,e);return{useTeleReducer:function(){return useTele(r)},reset:function(){return r.setState(t)},apply:r.apply,dispatch:r.dispatch}},stateReducer=function(e,t){return"function"==typeof t?t(e):t},createTeleState=function(e){var t=createTeleReducer(stateReducer,stateReducer(null,e)),r=t.useTeleReducer,n=__rest(t,["useTeleReducer"]);return __assign({useTeleState:r},n)};export{createTeleReducer,createTeleState};