Files
twenty_crm/front/src/modules/auth/states/tokenPairState.ts
2023-06-24 11:18:13 -07:00

30 lines
839 B
TypeScript

import { atom, AtomEffect } from 'recoil';
import { cookieStorage } from '@/utils/cookie-storage';
import { AuthTokenPair } from '~/generated/graphql';
const cookieStorageEffect =
(key: string): AtomEffect<AuthTokenPair | null> =>
({ 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<AuthTokenPair | null>({
key: 'tokenPairState',
default: null,
effects: [cookieStorageEffect('tokenPair')],
});