UNPKG

2.93 kBSource Map (JSON)View Raw
1{"version":3,"sources":["useStorage.js"],"names":["useStorage","type","initialValue","store","setStore","storageType","get","key","isClient","window","getItem","set","value","valueToStore","Function","setItem","JSON","stringify","x","Object","keys","map","k","storage"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;;;;;;;;;;;;;;;;;AAGA,IAAMA,UAAU,GAAG,SAAbA,UAAa,CAACC,IAAD;AAAA,SAAU,UAACC,YAAD,EAAkB;AAAA,oBACnB,qBAASA,YAAT,CADmB;AAAA;AAAA,QACtCC,KADsC;AAAA,QAC/BC,QAD+B;;AAG7C,QAAIC,WAAW,GAAGJ,IAAlB;;AAEA,QAAII,WAAW,KAAK,OAAhB,IAA2BA,WAAW,KAAK,SAA/C,EAA0D;AACxDA,MAAAA,WAAW,GAAG,OAAd;AACD;;AAEDA,IAAAA,WAAW,IAAI,SAAf;;AAGA,QAAMC,GAAG,GAAG,SAANA,GAAM,CAACC,GAAD;AAAA,aAAS,iCAAgBC,uBAAWC,MAAM,CAACJ,WAAD,CAAN,CAAoBK,OAApB,CAA4BH,GAA5B,CAAX,GAA8CJ,KAAK,CAACI,GAAD,CAAnE,CAAT;AAAA,KAAZ;;AACA,QAAMI,GAAG,GAAG,SAANA,GAAM,CAACJ,GAAD,EAAMK,KAAN,EAAgB;AAC1B,UAAMC,YAAY,GAAGD,KAAK,YAAYE,QAAjB,GAA4BF,KAAK,CAAC,iCAAgBT,KAAK,CAACI,GAAD,CAArB,CAAD,CAAjC,GAAiEK,KAAtF;;AAEA,UAAIJ,oBAAJ,EAAc;AACZC,QAAAA,MAAM,CAACJ,WAAD,CAAN,CAAoBU,OAApB,CAA4BR,GAA5B,EAAiCS,IAAI,CAACC,SAAL,CAAeJ,YAAf,CAAjC;AACD;;AAED,aAAOT,QAAQ,CAAC,UAACc,CAAD;AAAA,iCACXA,CADW,sBAEbX,GAFa,EAEPM,YAFO;AAAA,OAAD,CAAf;AAID,KAXD;;AAaA,0BAAU,YAAM;AACd,UAAIL,oBAAJ,EAAc;AACZW,QAAAA,MAAM,CACHC,IADH,CACQjB,KADR,EAEGkB,GAFH,CAEO,UAACC,CAAD;AAAA,iBAAOb,MAAM,CAACJ,WAAD,CAAN,CAAoBU,OAApB,CAA4BO,CAA5B,EAA+BN,IAAI,CAACC,SAAL,CAAed,KAAK,CAACmB,CAAD,CAApB,CAA/B,CAAP;AAAA,SAFP;AAGD;AACF,KAND,EAMG,CAACnB,KAAD,CANH;AAQA,QAAIoB,OAAO,GAAGpB,KAAd;;AAEA,QAAIK,oBAAJ,EAAc;AACZe,MAAAA,OAAO,GAAGd,MAAM,CAACJ,WAAD,CAAhB;AACD;;AAED,6BACKkB,OADL;AAEEjB,MAAAA,GAAG,EAAHA,GAFF;AAGEK,MAAAA,GAAG,EAAHA;AAHF;AAKD,GA7CkB;AAAA,CAAnB;;eA+CeX,U","sourcesContent":["import { useState, useEffect } from 'react';\nimport safelyParseJson from './utils/safelyParseJson';\nimport isClient from './utils/isClient';\n\n\nconst useStorage = (type) => (initialValue) => {\n const [store, setStore] = useState(initialValue);\n\n let storageType = type;\n\n if (storageType !== 'local' && storageType !== 'session') {\n storageType = 'local';\n }\n\n storageType += 'Storage';\n\n // Setters and Getters\n const get = (key) => safelyParseJson(isClient ? window[storageType].getItem(key) : store[key]);\n const set = (key, value) => {\n const valueToStore = value instanceof Function ? value(safelyParseJson(store[key])) : value;\n\n if (isClient) {\n window[storageType].setItem(key, JSON.stringify(valueToStore));\n }\n\n return setStore((x) => ({\n ...x,\n [key]: valueToStore,\n }));\n };\n\n useEffect(() => {\n if (isClient) {\n Object\n .keys(store)\n .map((k) => window[storageType].setItem(k, JSON.stringify(store[k])));\n }\n }, [store]);\n\n let storage = store;\n\n if (isClient) {\n storage = window[storageType];\n }\n\n return {\n ...storage,\n get,\n set,\n };\n};\n\nexport default useStorage;\n"],"file":"useStorage.js"}
\No newline at end of file