all repos — caroster @ a781a5fafbf60b3c6587213cf3c9bfb735bdf933

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

frontend/stores/useAuthStore.tsx (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;
 8  setUser: (user: UsersPermissionsUser) => void;
 9  logout: () => void;
10};
11
12const hasStorage = typeof localStorage !== 'undefined';
13
14const useAuth = 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 && localStorage.getItem('user')
22      ? JSON.parse(localStorage.getItem('user'))
23      : null,
24  setUser: user => {
25    if (hasStorage) localStorage.setItem('user', JSON.stringify(user));
26    set({user});
27  },
28  logout: () => {
29    set({token: null, user: null});
30    localStorage.removeItem('token');
31    localStorage.removeItem('user');
32    window.location.href = '/login';
33  },
34}));
35
36export default useAuth;