UNPKG

use-sharable-state

Version:
3 lines (2 loc) 1.34 kB
import{useRef as e,useMemo as t,useState as r,useEffect as a,useCallback as s}from"react";const n=(()=>{const e={};return{mappedData:e,addSetter:({stateKey:t,setterKey:r,setter:a,initialValue:s})=>{e[t]?e[t].setters[r]=a:e[t]={value:s,setters:{[r]:a}}},removeSetter:({stateKey:t,setterKey:r})=>{var a;null!=(a=e[t])&&a.setters[r]&&delete e[t].setters[r]},updateState:({stateKey:t,value:r})=>{const a=e[t];a&&(a.value=r,Object.entries(a.setters).forEach(([,e])=>{e(r)}))},getCurrentState:t=>{var r;return null==(r=e[t])?void 0:r.value},getCurrentSetter:({stateKey:t,setterKey:r})=>{var a;return null==(a=e[t])?void 0:a.setters[r]},generateId:()=>(Date.now().toString(36)+Math.random().toString(36)).replace(/\./g,""),clearStates:()=>{Object.entries(e).forEach(([t,r])=>{r.setters&&Object.entries(r.setters).forEach(([,e])=>{e(void 0)}),delete e[t]})}}})(),u=(u,o)=>{const l=e(n.generateId()),c=t(()=>n.getCurrentState(u)||o,[o,u]),[i,y]=r(c);return a(()=>{const e=l.current;return n.getCurrentSetter({stateKey:u,setterKey:l.current})||n.addSetter({stateKey:u,initialValue:c,setter:y,setterKey:e}),()=>n.removeSetter({stateKey:u,setterKey:e})},[c,u]),[i,s(e=>{n.updateState("function"==typeof e?{stateKey:u,value:e(n.getCurrentState(u))}:{stateKey:u,value:e})},[u])]};export{u as useSharableState}; //# sourceMappingURL=index.modern.js.map