unistore-hooks
Version:
2 lines (1 loc) • 1.37 kB
JavaScript
var r=require("preact"),e=require("preact/hooks");function n(r,e,n,t,u){for(e=e.split?e.split("."):e,t=0;t<e.length;t++)r=r?r[e[t]]:u;return r===u?n:r}var t=r.createContext();function u(r,e){var n=!1;for(var t in e)r[t]!==e[t]&&(!1===n&&(n=!0,r=Object.assign({},r)),r[t]=e[t]);return r}exports.Provider=t.Provider,exports.useActions=function(r,n,u){if("function"==typeof u){var o=[n,u];u=o[0],n=o[1]}var i=e.useContext(t),a=e.useMemo(function(){return function(r,e){var n=e.bindings||(e.bindings=new("function"==typeof WeakMap?WeakMap:Map)),t=n.get(r);if(!t)for(var u in n.set(r,t={}),"function"==typeof r&&(r=r(e)),r)t[u]=e.action(r[u]);return t}(r,i)},[r,i]);return n=e.useCallback(n,u||[]),e.useMemo(function(){var r=n,e={};if(!r)return a;for(var t in"function"==typeof r&&(r=r(a)),r){var u=r[t];Array.isArray(u)&&(u=u[0].bind.apply(u[0],u)),e[t]=u}return e},[a,n])},exports.useStore=function(){return e.useContext(t)},exports.useStoreState=function(r){var o=e.useContext(t),i=e.useMemo(function(){return"function"==(t=typeof(e=r))?e:("string"==t&&(e=e.split(/\s*,\s*/)),Array.isArray(e)&&(e=e.reduce(function(r,e){return r[e]=e,r},{})),function(r){var t={};if(r)for(var u in e)t[u]=u in r?r[u]:n(r,e[u]);return t});var e,t},[]),a=e.useReducer(u,o?i(o.getState()):{}),f=a[0],s=a[1];return e.useEffect(function(){return o.subscribe(function(r){return s(i(r))})},[o]),f};