chat / client /src /store /utils.ts
helloya20's picture
Upload 2345 files
f0743f4 verified
import { atom } from 'recoil';
// Improved helper function to create atoms with localStorage
export function atomWithLocalStorage<T>(key: string, defaultValue: T) {
return atom<T>({
key,
default: defaultValue,
effects_UNSTABLE: [
({ setSelf, onSet }) => {
const savedValue = localStorage.getItem(key);
if (savedValue !== null) {
try {
const parsedValue = JSON.parse(savedValue);
setSelf(parsedValue);
} catch (e) {
console.error(
`Error parsing localStorage key "${key}", \`savedValue\`: defaultValue, error:`,
e,
);
localStorage.setItem(key, JSON.stringify(defaultValue));
setSelf(defaultValue);
}
}
onSet((newValue: T) => {
localStorage.setItem(key, JSON.stringify(newValue));
});
},
],
});
}