16 lines
364 B
TypeScript
16 lines
364 B
TypeScript
|
|
import { proxy, snapshot, subscribe } from 'valtio';
|
||
|
|
|
||
|
|
export function proxyWithPersistant<V>(
|
||
|
|
val: V,
|
||
|
|
opts: {
|
||
|
|
key: string;
|
||
|
|
},
|
||
|
|
) {
|
||
|
|
const local = localStorage.getItem(opts.key);
|
||
|
|
const state = proxy(local ? JSON.parse(local) : val);
|
||
|
|
subscribe(state, () => {
|
||
|
|
localStorage.setItem(opts.key, JSON.stringify(snapshot(state)));
|
||
|
|
});
|
||
|
|
return state;
|
||
|
|
}
|