source: imaps-frontend/node_modules/react-use/esm/useLocalStorage.js

main
Last change on this file was d565449, checked in by stefan toskovski <stefantoska84@…>, 4 weeks ago

Update repo after prototype presentation

  • Property mode set to 100644
File size: 3.1 KB
Line 
1import { useCallback, useState, useRef, useLayoutEffect } from 'react';
2import { isBrowser, noop } from './misc/util';
3var useLocalStorage = function (key, initialValue, options) {
4 if (!isBrowser) {
5 return [initialValue, noop, noop];
6 }
7 if (!key) {
8 throw new Error('useLocalStorage key may not be falsy');
9 }
10 var deserializer = options
11 ? options.raw
12 ? function (value) { return value; }
13 : options.deserializer
14 : JSON.parse;
15 // eslint-disable-next-line react-hooks/rules-of-hooks
16 var initializer = useRef(function (key) {
17 try {
18 var serializer = options ? (options.raw ? String : options.serializer) : JSON.stringify;
19 var localStorageValue = localStorage.getItem(key);
20 if (localStorageValue !== null) {
21 return deserializer(localStorageValue);
22 }
23 else {
24 initialValue && localStorage.setItem(key, serializer(initialValue));
25 return initialValue;
26 }
27 }
28 catch (_a) {
29 // If user is in private mode or has storage restriction
30 // localStorage can throw. JSON.parse and JSON.stringify
31 // can throw, too.
32 return initialValue;
33 }
34 });
35 // eslint-disable-next-line react-hooks/rules-of-hooks
36 var _a = useState(function () { return initializer.current(key); }), state = _a[0], setState = _a[1];
37 // eslint-disable-next-line react-hooks/rules-of-hooks
38 useLayoutEffect(function () { return setState(initializer.current(key)); }, [key]);
39 // eslint-disable-next-line react-hooks/rules-of-hooks
40 var set = useCallback(function (valOrFunc) {
41 try {
42 var newState = typeof valOrFunc === 'function' ? valOrFunc(state) : valOrFunc;
43 if (typeof newState === 'undefined')
44 return;
45 var value = void 0;
46 if (options)
47 if (options.raw)
48 if (typeof newState === 'string')
49 value = newState;
50 else
51 value = JSON.stringify(newState);
52 else if (options.serializer)
53 value = options.serializer(newState);
54 else
55 value = JSON.stringify(newState);
56 else
57 value = JSON.stringify(newState);
58 localStorage.setItem(key, value);
59 setState(deserializer(value));
60 }
61 catch (_a) {
62 // If user is in private mode or has storage restriction
63 // localStorage can throw. Also JSON.stringify can throw.
64 }
65 }, [key, setState]);
66 // eslint-disable-next-line react-hooks/rules-of-hooks
67 var remove = useCallback(function () {
68 try {
69 localStorage.removeItem(key);
70 setState(undefined);
71 }
72 catch (_a) {
73 // If user is in private mode or has storage restriction
74 // localStorage can throw.
75 }
76 }, [key, setState]);
77 return [state, set, remove];
78};
79export default useLocalStorage;
Note: See TracBrowser for help on using the repository browser.