UNPKG

epn-ui

Version:

Дизайн система кабинета ВМ

67 lines (64 loc) 2.05 kB
import { useState, useEffect, useCallback } from 'react'; var isValidEnv = function () { var isWindow = typeof window !== 'undefined'; return isWindow; }; var getParsedJSON = function (stringValue) { if (typeof stringValue !== 'string') return null; try { var result = JSON.parse(stringValue); return result; } catch (err) { return null; } }; var useLocalStorage = function (key, initialValue) { var _a = useState(initialValue), value = _a[0], setValue = _a[1]; useEffect(function () { if (!isValidEnv()) return; var result = window.localStorage.getItem(key); if (result === null) { setValue(initialValue); return; } try { var parsedResult = JSON.parse(result); setValue(parsedResult); } catch (err) { console.error(err); setValue(null); } }, [key, initialValue]); var setItem = function (newValue) { setValue(newValue); if (!isValidEnv()) return; window.localStorage.setItem(key, JSON.stringify(newValue)); }; var handleStorage = useCallback(function (event) { try { var parsedNewValue = getParsedJSON(event.newValue || ''); if (parsedNewValue === null) return; var isEqualKey = event.key === key; var isEqualValue = parsedNewValue === value; if (isEqualKey && !isEqualValue) { setValue(parsedNewValue); } } catch (err) { console.error(err); setValue(null); } }, [key, value]); useEffect(function () { window.addEventListener('storage', handleStorage); return function () { return window.removeEventListener('storage', handleStorage); }; }, [handleStorage]); return [value, setItem]; }; export { useLocalStorage as default };