const getSessionStorage = (itemName) => {
return JSON.parse(sessionStorage.getItem(itemName) || '""');
};
const setSessionStorage = (itemName, value) => {
sessionStorage.setItem(itemName, JSON.stringify(value));
};
export const usePersist = (key, data, options) => {
const { set, get } = options || {};
if (data.constructor !== Object) {
return data;
}
let defaultData = {
...data,
};
Object.freeze(defaultData);
const store = {
...defaultData,
...getSessionStorage(key),
};
const proxyData = new Proxy(store, {
set(o, p, v, r) {
set && set(o, p, v, r);
if (v !== Reflect.get(store, p)) {
setSessionStorage(key, {
...store,
[p]: v,
});
return Reflect.set(o, p, v, r);
} else {
return Reflect.set(o, p, store[p], r);
}
},
get(target, key) {
get && get(target, key);
if (key === "__proto__") {
return undefined;
}
return target[key];
},
});
return proxyData;
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49