UNPKG

react-store-context-hooks

Version:

Provides various data store hooks that allow functional components to share the application state within the same React Context or different React Context using persistent storage.

4 lines (3 loc) 5.81 kB
/*! react-store-context-hooks v4.0.0 | (c) Richard Huang <rickypc@users.noreply.github.com> | MPL-2.0 */ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("react")):"function"==typeof define&&define.amd?define(["exports","react"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).reactStoreContextHooks={},e.React)}(this,(function(e,t){"use strict";function r(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=r(t);function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function u(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach((function(t){i(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function c(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},u=Object.keys(e);for(n=0;n<u.length;n++)r=u[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var u=Object.getOwnPropertySymbols(e);for(n=0;n<u.length;n++)r=u[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function a(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==r)return;var n,o,u=[],i=!0,c=!1;try{for(r=r.call(e);!(i=(n=r.next()).done)&&(u.push(n.value),!t||u.length!==t);i=!0);}catch(e){c=!0,o=e}finally{try{i||null==r.return||r.return()}finally{if(c)throw o}}return u}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return f(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return f(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function f(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function s(e){var t=function(e,t){if("object"!=typeof e||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:String(t)}var l={get:function(e,t,r){return e instanceof Storage?function(e,t){var r;try{r=JSON.parse(e)}catch(e){}return void 0===r?t:r}(e.getItem(t)||"undefined",r):r},remove:function(e,t){return e instanceof Storage&&null!==e.getItem(t)&&(e.removeItem(t),!0)},set:function(e,t,r){if(e instanceof Storage){var n=JSON.stringify(r);if(e.getItem(t)!==n)return e.setItem(t,n),!0}return!1},sets:function(e,t){var r=e===localStorage?"local":"session";Object.entries(t).forEach((function(t){var n=a(t,2),o=n[0],u=n[1];l.set(e,o,u)&&document.dispatchEvent(new CustomEvent("".concat(r,"Storage.setItem"),{detail:{key:o,value:u}}))}))}},v=t.createContext({}),m=function(e,r,n){var o=e===localStorage?"local":"session",u=a(t.useState(l.get(e,r,n)),2),i=u[0],c=u[1];return t.useEffect((function(){var e=function(e){e.detail.key===r&&c(void 0)},t=function(e){e.detail.key===r&&c(e.detail.value)};return document.addEventListener("".concat(o,"Storage.removeItem"),e),document.addEventListener("".concat(o,"Storage.setItem"),t),function(){document.removeEventListener("".concat(o,"Storage.removeItem"),e),document.removeEventListener("".concat(o,"Storage.setItem"),t)}}),[]),[i,t.useCallback((function(t){l.set(e,r,t)&&document.dispatchEvent(new CustomEvent("".concat(o,"Storage.setItem"),{detail:{key:r,value:t}}))}),[]),t.useCallback((function(){l.remove(e,r)&&document.dispatchEvent(new CustomEvent("".concat(o,"Storage.removeItem"),{detail:{key:r}}))}),[])]},y=function(e){return{setStores:t.useCallback((function(t){return l.sets(e,t)}),[])}};e.isEmpty=function(e){return null==e||"object"==typeof e&&0===Object.keys(e).length||"string"==typeof e&&0===e.trim().length||["boolean","number"].includes(typeof e)&&!e},e.useLocalStore=function(e,t){return m(localStorage,e,t)},e.useLocalStores=function(){return y(localStorage)},e.useSessionStore=function(e,t){return m(sessionStorage,e,t)},e.useSessionStores=function(){return y(sessionStorage)},e.useStore=function(e,r,n){var o=t.useContext(v);return[o.get(e,r,n),t.useCallback((function(t){return o.set(e,t,n)}),[o]),t.useCallback((function(){return o.remove(e,n)}),[o])]},e.useStores=function(e){var r=t.useContext(v);return{setStores:t.useCallback((function(t){return r.sets(t,e)}),[r])}},e.withStore=function(e){return function(r){return n.default.createElement(v.Provider,{value:(o=a(t.useState({}),2),f=o[0],m=o[1],{get:function(e,t,r){var n=f[e];return void 0===n?l.get(r,e,t):n},remove:function(e,t){return m((function(r){return l.remove(t,e)||e in r?(r[e],u({},c(r,[e].map(s)))):r}))},set:function(e,t,r){return m((function(n){return n[e]!==t?(l.set(r,e,t),u(u({},n),{},i({},e,t))):n}))},sets:function(e,t){return m((function(r){var n=!1,o=Object.entries(e).filter((function(e){var t=a(e,2),n=t[0],o=t[1];return r[n]!==o})).reduce((function(e,r){var o=a(r,2),u=o[0],i=o[1];return l.set(t,u,i),e[u]=i,n=!0,e}),r);return n?u({},o):r}))}})},n.default.createElement(e,r));var o,f,m}}})); //# sourceMappingURL=index.umd.js.map