UNPKG

unistore-hooks

Version:

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