all repos — caroster @ 6ed452d52636885944d0c68e07d2bde6f7a77a21

[Octree] Group carpool to your event https://caroster.io

frontend/stores/useAuthStore.ts (view raw)

 1import create from 'zustand';
 2import {UsersPermissionsUser} from '../generated/graphql';
 3
 4type State = {
 5  token: string | null;
 6  setToken: (token?: string) => void;
 7  user: UsersPermissionsUser | null;
 8  setUser: (user?: UsersPermissionsUser) => void;
 9  logout: () => void;
10};
11
12const hasStorage = typeof localStorage !== 'undefined';
13
14const useAuthStore = create<State>((set, get) => ({
15  token: hasStorage ? localStorage.getItem('token') : null,
16  setToken: (token: string) => {
17    if (hasStorage) localStorage.setItem('token', token);
18    set({token});
19  },
20  user:
21    hasStorage &&
22    localStorage.getItem('user') &&
23    localStorage.getItem('user') !== 'undefined'
24      ? JSON.parse(localStorage.getItem('user'))
25      : null,
26  setUser: user => {
27    if (hasStorage) localStorage.setItem('user', JSON.stringify(user));
28    set({user});
29  },
30  logout: () => {
31    set({token: null, user: null});
32    localStorage.removeItem('token');
33    localStorage.removeItem('user');
34    window.location.href = '/auth/login';
35  },
36}));
37
38export default useAuthStore;