65 lines
1.6 KiB
TypeScript
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;
|