import { atom, AtomEffect } from 'recoil'; import { cookieStorage } from '@/utils/cookie-storage'; import { AuthTokenPair } from '~/generated/graphql'; const cookieStorageEffect = (key: string): AtomEffect => ({ setSelf, onSet }) => { const savedValue = cookieStorage.getItem(key); if (savedValue != null && JSON.parse(savedValue)['accessToken']) { setSelf(JSON.parse(savedValue)); } onSet((newValue, _, isReset) => { if (!newValue) { cookieStorage.removeItem(key); return; } isReset ? cookieStorage.removeItem(key) : cookieStorage.setItem(key, JSON.stringify(newValue)); }); }; export const tokenPairState = atom({ key: 'tokenPairState', default: null, effects: [cookieStorageEffect('tokenPair')], });