30 lines
1.1 KiB
TypeScript
30 lines
1.1 KiB
TypeScript
import { create } from "zustand";
|
|
import { UserApi } from "@/entities/user";
|
|
import { getUserInfo } from "../../../../packages/common/components/src/api";
|
|
|
|
interface AdminStore {
|
|
/** 현재 사용자가 관리자 목록에 있는지 */
|
|
isAdminInfo: boolean;
|
|
setAdminInfo: (value: boolean) => void;
|
|
/** API로 관리자 목록 조회 후 현재 사용자 일치 여부 설정 */
|
|
fetchAdminInfo: () => Promise<void>;
|
|
}
|
|
|
|
const useAdminStoreHook = create<AdminStore>((set) => ({
|
|
isAdminInfo: false,
|
|
setAdminInfo: (value) => set({ isAdminInfo: value }),
|
|
fetchAdminInfo: async () => {
|
|
try {
|
|
const userInfo = await getUserInfo();
|
|
const adminList = await UserApi.findPageAdminUser({ userName: userInfo.userName });
|
|
const matched = adminList.content?.filter((a) => a.userName === userInfo.userName) ?? [];
|
|
set({ isAdminInfo: matched.length > 0 });
|
|
} catch {
|
|
set({ isAdminInfo: false });
|
|
}
|
|
},
|
|
}));
|
|
|
|
export const useAdminStore = useAdminStoreHook;
|
|
export const getAdminStoreState = () => useAdminStoreHook.getState();
|