metalib
Version:
Snippets pack
51 lines (41 loc) • 2.32 kB
JavaScript
;var React=_interopRequireWildcard(require("react"));Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;function _getRequireWildcardCache(a){if("function"!=typeof WeakMap)return null;var b=new WeakMap,c=new WeakMap;return(_getRequireWildcardCache=function(a){return a?c:b})(a)}function _interopRequireWildcard(a,b){if(!b&&a&&a.__esModule)return a;if(null===a||"object"!=typeof a&&"function"!=typeof a)return{default:a};var c=_getRequireWildcardCache(b);if(c&&c.has(a))return c.get(a);var d={},e=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var f in a)if("default"!=f&&Object.prototype.hasOwnProperty.call(a,f)){var g=e?Object.getOwnPropertyDescriptor(a,f):null;g&&(g.get||g.set)?Object.defineProperty(d,f,g):d[f]=a[f]}return d.default=a,c&&c.set(a,d),d}/*
Usage:
// hooks
import {useStorage} from 'hooks/'
const STORAGE_KEY = 'DEMO_KEY'
function Demo() {
const storage = useStorage()
const [data, setData] = React.useState({name: ''})
React.useEffect(() => {
const stored_data = storage.getItem(STORAGE_KEY, 'local')
if(typeof stored_data === 'object') {
setData(stored_data)
}
}, [])
const handleChange = (key) => (event) => {
const value = event.target.value
setData(c => {
const newData = {...c, [key]: value}
storage.setItem(STORAGE_KEY, newData, 'local')
return newData;
})
}
return (
<TextField
value={data.name}
onChange={handleChange('name')}
label="Name"
type="text"
fullWidth
/>
);
};
*/ // type StorageType = 'session' | 'local';
// type UseStorageReturnValue = {
// getItem: (key: string, type?: StorageType) => string;
// setItem: (key: string, value: string, type?: StorageType) => boolean;
// removeItem: (key: string, type?: StorageType) => void;
// };
const useStorage=()=>{const a=a=>`${a??"session"}Storage`,b="undefined"!=typeof window;return{getItem:(c,d)=>{let e=window[a(d)][c];// If value is object
try{e=JSON.parse(e)}catch(a){}return b?e:""},setItem:(c,d,e)=>{if(b){// If value is object
if("object"==typeof d)try{d=JSON.stringify(d)}catch(a){console.error("Can't serialize data",a)}return window[a(e)].setItem(c,d),!0}return!1},removeItem:(b,c)=>{window[a(c)].removeItem(b)}}};var _default=useStorage;exports.default=_default;