school-dashboard-exercise/src/zustand/AuthState.ts
2024-06-23 12:16:01 +03:00

65 lines
1.6 KiB
TypeScript

import { create } from "zustand";
import {
ABILITIES_KEY,
TERM_OBJECT_KEY,
TOKEN_KEY,
USER_KEY,
} from "../config/AppKey";
import { getLocalStorage } from "../utils/LocalStorage";
interface AuthStore {
token: string | null | undefined;
abilities: any;
isAuthenticated: boolean;
term: number | null | undefined;
login: (Data: any) => Promise<void>;
logout: () => Promise<void>;
setTerm: (newTerm: number) => void;
}
const useAuthState = create<AuthStore>((set) => {
const storedToken = localStorage.getItem(TOKEN_KEY);
const storedAbilities = localStorage.getItem(ABILITIES_KEY);
const storedTerm = getLocalStorage(TERM_OBJECT_KEY)?.id;
return {
isAuthenticated: !!storedToken && !!storedAbilities,
token: storedToken,
abilities: storedAbilities,
term: storedTerm,
login: async (Data) => {
// console.log(Data);
localStorage.setItem(TOKEN_KEY, Data?.token);
localStorage.setItem(USER_KEY, JSON.stringify(Data?.user));
localStorage.setItem(ABILITIES_KEY, JSON.stringify(Data?.abilities));
set((state) => ({
isAuthenticated: true,
token: Data?.token,
abilities: Data?.abilities,
}));
},
setTerm: (newTerm: number) => {
set(() => ({
term: newTerm,
}));
},
logout: async () => {
localStorage.removeItem(TOKEN_KEY);
localStorage.removeItem(USER_KEY);
localStorage.removeItem(ABILITIES_KEY);
set(() => ({
isAuthenticated: false,
token: null,
abilities: null,
term: null,
}));
},
};
});
export default useAuthState;