UNPKG

@ucam/design-system

Version:
51 lines (47 loc) 5.69 kB
'use strict'; var React = require('react'); var useHydrated = require('../useHydrated/useHydrated.js'); function localStorageAvailable() { // https://gist.github.com/paulirish/5558557 try { const testString = '__test_localStorage__'; localStorage.setItem(testString, testString); localStorage.removeItem(testString); return true; } catch (e) { return false; } } /** * A React Hook to gets an item from local storage. * It handles SSR by returning the defaultValue for the initial hydration render, regardless of value in localStorage. * It must be used inside a `<HydrationChecker/>` (`<ThemeProvider/>` does this automatically). */ const useLocalStorage = (key, options) => { const localStorageValue = localStorageAvailable() ? localStorage.getItem(key) : null; const hydrated = useHydrated.useHydrated(); const [currentValue, setCurrentValue] = React.useState(localStorageValue == null ? options === null || options === void 0 ? void 0 : options.defaultValue : localStorageValue); const setValue = (value) => { if (currentValue === value) { return; } if (localStorageAvailable()) { if (value == undefined) { localStorage.removeItem(key); } else { localStorage.setItem(key, value); } } setCurrentValue(value); }; if (hydrated) { return [currentValue, setValue]; } else { return [options === null || options === void 0 ? void 0 : options.defaultValue, setValue]; } }; module.exports = useLocalStorage; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlTG9jYWxTdG9yYWdlLmpzIiwic291cmNlcyI6WyIvQHVjYW0vZGVzaWduLXN5c3RlbS9zcmMvdXNlTG9jYWxTdG9yYWdlL3VzZUxvY2FsU3RvcmFnZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB1c2VIeWRyYXRlZCBmcm9tICcuLi91c2VIeWRyYXRlZCc7XG5cbmZ1bmN0aW9uIGxvY2FsU3RvcmFnZUF2YWlsYWJsZSgpIHtcbiAgLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vcGF1bGlyaXNoLzU1NTg1NTdcbiAgdHJ5IHtcbiAgICBjb25zdCB0ZXN0U3RyaW5nID0gJ19fdGVzdF9sb2NhbFN0b3JhZ2VfXyc7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGVzdFN0cmluZywgdGVzdFN0cmluZyk7XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGVzdFN0cmluZyk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBMb2NhbFN0b3JhZ2VPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlIHRvIGJlIHJldHVybmVkIGR1cmluZyBoeWRyYXRpb24gb3IgaWYgbG9jYWxTdG9yYWdlIGRvZXMgbm90IGNvbnRhaW4gYSB2YWx1ZS5cbiAgICovXG4gIGRlZmF1bHRWYWx1ZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBBIFJlYWN0IEhvb2sgdG8gZ2V0cyBhbiBpdGVtIGZyb20gbG9jYWwgc3RvcmFnZS5cbiAqIEl0IGhhbmRsZXMgU1NSIGJ5IHJldHVybmluZyB0aGUgZGVmYXVsdFZhbHVlIGZvciB0aGUgaW5pdGlhbCBoeWRyYXRpb24gcmVuZGVyLCByZWdhcmRsZXNzIG9mIHZhbHVlIGluIGxvY2FsU3RvcmFnZS5cbiAqIEl0IG11c3QgYmUgdXNlZCBpbnNpZGUgYSBgPEh5ZHJhdGlvbkNoZWNrZXIvPmAgKGA8VGhlbWVQcm92aWRlci8+YCBkb2VzIHRoaXMgYXV0b21hdGljYWxseSkuXG4gKi9cbmNvbnN0IHVzZUxvY2FsU3RvcmFnZSA9IChcbiAga2V5OiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBMb2NhbFN0b3JhZ2VPcHRpb25zXG4pOiBbc3RyaW5nIHwgdW5kZWZpbmVkLCAodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4gdm9pZF0gPT4ge1xuICBjb25zdCBsb2NhbFN0b3JhZ2VWYWx1ZSA9IGxvY2FsU3RvcmFnZUF2YWlsYWJsZSgpID8gbG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KSA6IG51bGw7XG4gIGNvbnN0IGh5ZHJhdGVkID0gdXNlSHlkcmF0ZWQoKTtcbiAgY29uc3QgW2N1cnJlbnRWYWx1ZSwgc2V0Q3VycmVudFZhbHVlXSA9IHVzZVN0YXRlPHVuZGVmaW5lZCB8IHN0cmluZz4oXG4gICAgbG9jYWxTdG9yYWdlVmFsdWUgPT0gbnVsbCA/IG9wdGlvbnM/LmRlZmF1bHRWYWx1ZSA6IGxvY2FsU3RvcmFnZVZhbHVlXG4gICk7XG5cbiAgY29uc3Qgc2V0VmFsdWUgPSAodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4ge1xuICAgIGlmIChjdXJyZW50VmFsdWUgPT09IHZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChsb2NhbFN0b3JhZ2VBdmFpbGFibGUoKSkge1xuICAgICAgaWYgKHZhbHVlID09IHVuZGVmaW5lZCkge1xuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHNldEN1cnJlbnRWYWx1ZSh2YWx1ZSk7XG4gIH07XG5cbiAgaWYgKGh5ZHJhdGVkKSB7XG4gICAgcmV0dXJuIFtjdXJyZW50VmFsdWUsIHNldFZhbHVlXTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gW29wdGlvbnM/LmRlZmF1bHRWYWx1ZSwgc2V0VmFsdWVdO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCB1c2VMb2NhbFN0b3JhZ2U7XG4iXSwibmFtZXMiOlsidXNlSHlkcmF0ZWQiLCJ1c2VTdGF0ZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFHQSxTQUFTLHFCQUFxQjs7SUFFNUIsSUFBSTtRQUNGLE1BQU0sVUFBVSxHQUFHLHVCQUF1QixDQUFDO1FBQzNDLFlBQVksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzdDLFlBQVksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDcEMsT0FBTyxJQUFJLENBQUM7S0FDYjtJQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ1YsT0FBTyxLQUFLLENBQUM7S0FDZDtBQUNILENBQUM7QUFTRDs7Ozs7TUFLTSxlQUFlLEdBQUcsQ0FDdEIsR0FBVyxFQUNYLE9BQTZCO0lBRTdCLE1BQU0saUJBQWlCLEdBQUcscUJBQXFCLEVBQUUsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUNyRixNQUFNLFFBQVEsR0FBR0EsdUJBQVcsRUFBRSxDQUFDO0lBQy9CLE1BQU0sQ0FBQyxZQUFZLEVBQUUsZUFBZSxDQUFDLEdBQUdDLGNBQVEsQ0FDOUMsaUJBQWlCLElBQUksSUFBSSxHQUFHLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxZQUFZLEdBQUcsaUJBQWlCLENBQ3RFLENBQUM7SUFFRixNQUFNLFFBQVEsR0FBRyxDQUFDLEtBQXlCO1FBQ3pDLElBQUksWUFBWSxLQUFLLEtBQUssRUFBRTtZQUMxQixPQUFPO1NBQ1I7UUFDRCxJQUFJLHFCQUFxQixFQUFFLEVBQUU7WUFDM0IsSUFBSSxLQUFLLElBQUksU0FBUyxFQUFFO2dCQUN0QixZQUFZLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQzlCO2lCQUFNO2dCQUNMLFlBQVksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQ2xDO1NBQ0Y7UUFDRCxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDeEIsQ0FBQztJQUVGLElBQUksUUFBUSxFQUFFO1FBQ1osT0FBTyxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQztLQUNqQztTQUFNO1FBQ0wsT0FBTyxDQUFDLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUM7S0FDMUM7QUFDSDs7OzsifQ==