@preact-hooks/unistore
Version:
A custom Preact hook to wire up components to Unistore.
2 lines (1 loc) • 1.31 kB
JavaScript
!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("preact/hooks"),require("preact")):"function"==typeof define&&define.amd?define(["exports","preact/hooks","preact"],r):r((e=e||self).unistoreHooks={},e.preactHooks,e.preact)}(this,(function(e,r,t){var n="undefined"!=typeof window?r.useLayoutEffect:r.useEffect,o=(e,r)=>e===r,u=e=>(e=e.split(/\s*,\s*/),r=>{for(var t={},n=0;n<e.length;n++)t[e[n]]=r[e[n]];return t}),c=t.createContext(null),s=c.Provider,a=()=>r.useContext(c);e.StoreContext=c,e.StoreProvider=s,e.useAction=e=>{var t=a();return r.useMemo(()=>t.action(e),[t,e])},e.useSelector=function(e,t){void 0===t&&(t=o);var c,s=a(),[,i]=r.useReducer(e=>e+1,0),f=r.useRef(null),l=r.useRef(null),d=r.useRef(null),p="string"==typeof e;try{if(f.current!==e||d.current){var v=s.getState();c=p?u(e)(v):e(v)}else c=l.current}catch(e){var h="An error occured while selecting the store state: "+e.message+".";throw d.current&&(h+="\nThe error may be related to the previous error:\n"+d.current.stack+"\n\nOriginal stack trace:"),new Error(h)}return n(()=>{f.current=p?u(e):e,l.current=c,d.current=null}),n(()=>{var e=()=>{try{var e=f.current(s.getState());if(t(e,l.current))return;l.current=e}catch(e){d.current=e}i({})},r=s.subscribe(e);return e(),()=>r()},[s]),c},e.useStore=a}));