UNPKG

siegel

Version:

Web application development ecosystem

1 lines 683 B
import{useState as t,useLayoutEffect as e}from"react";let s=t=>{let e=t();return e.__updated=0,e};export default function(a,r){let l={listeners:[],state:s(a),setState(t){let e=l.state.__updated||0,s=l.state;s.__updated=e,t.__updated||=e,t.__updated++,l.state={...t};for(let t=0,e=l.listeners.length;t<e;t++){let e=l.listeners[t];e.withShouldUpdateCb?e(l.state,s):e(l.state)}}};return Object.keys(r).forEach(t=>{r[t]=r[t].bind(r,l)}),l.actions=r,{store:l,useStore(s){let a=t(l.state)[1];if(s){let t=a;(a=(e,a)=>{s(a,e)&&t(e)}).withShouldUpdateCb=!0}return e(()=>(l.listeners.push(a),()=>{l.listeners=l.listeners.filter(t=>t!==a)}),[]),[l.state,l.actions]},reset(){l.setState(s(a))}}};