@guruhotel/aura-hooks
Version:
🪝 Hooks library designed by the Guruhotel team for Aura UI
1 lines • 1.44 kB
JavaScript
exports.__esModule=!0,exports.useLocalStorage=function(e){return o("localStorage","use-local-storage")(e)},exports.useSessionStorage=function(e){return o("sessionStorage","use-session-storage")(e)};var e=require("react"),t=require("../use-window-event/use-window-event");function n(e){try{return JSON.parse(e)}catch(t){return e}}function o(o,r){const a="localStorage"===o?"aura-local-storage":"aura-session-storage";return function({key:u,defaultValue:s,getInitialValueInEffect:i=!0,deserialize:l=n,serialize:c=(e=>function(e,t){try{return JSON.stringify(e)}catch(e){throw new Error(`@guruhotel/aura-hooks ${t}: Failed to serialize the value`)}}(e,r))}){const d=(0,e.useCallback)((e=>{if("undefined"==typeof window||!(o in window)||e)return null!=s?s:"";const t=window[o].getItem(u);return null!==t?l(t):null!=s?s:""}),[u,s]),[w,f]=(0,e.useState)(d(i)),v=(0,e.useCallback)((e=>{e instanceof Function?f((t=>{const n=e(t);return window[o].setItem(u,c(n)),window.dispatchEvent(new CustomEvent(a,{detail:{key:u,value:e(t)}})),n})):(window[o].setItem(u,c(e)),window.dispatchEvent(new CustomEvent(a,{detail:{key:u,value:e}})),f(e))}),[u]);return(0,t.useWindowEvent)("storage",(e=>{var t;e.storageArea===window[o]&&e.key===u&&f(l(null!=(t=e.newValue)?t:""))})),(0,t.useWindowEvent)(a,(e=>{e.detail.key===u&&f(e.detail.value)})),(0,e.useEffect)((()=>{void 0!==s&&void 0===w&&v(s)}),[s,w,v]),(0,e.useEffect)((()=>{i&&f(d())}),[]),[void 0===w?s:w,v]}}