swag-shop/frontend/src/stores/authStore.ts

56 lines
1.3 KiB
TypeScript

import Cookies from "js-cookie";
import { create } from "zustand";
const ACCESS_TOKEN = "thisisjustarandomstring";
interface AuthUser {
accountNo: string;
email: string;
role: string[];
exp: number;
}
interface AuthState {
auth: {
user: AuthUser | null;
setUser: (user: AuthUser | null) => void;
accessToken: string;
setAccessToken: (accessToken: string) => void;
resetAccessToken: () => void;
reset: () => void;
};
}
export const useAuthStore = create<AuthState>()((set) => {
const cookieState = Cookies.get(ACCESS_TOKEN);
const initToken = cookieState ? JSON.parse(cookieState) : "";
return {
auth: {
user: null,
setUser: (user) =>
set((state) => ({ ...state, auth: { ...state.auth, user } })),
accessToken: initToken,
setAccessToken: (accessToken) =>
set((state) => {
Cookies.set(ACCESS_TOKEN, JSON.stringify(accessToken));
return { ...state, auth: { ...state.auth, accessToken } };
}),
resetAccessToken: () =>
set((state) => {
Cookies.remove(ACCESS_TOKEN);
return { ...state, auth: { ...state.auth, accessToken: "" } };
}),
reset: () =>
set((state) => {
Cookies.remove(ACCESS_TOKEN);
return {
...state,
auth: { ...state.auth, user: null, accessToken: "" },
};
}),
},
};
});
// export const useAuth = () => useAuthStore((state) => state.auth)