'use strict'; import { create } from 'zustand'; import { toast } from 'sonner'; import { useContextKey } from '@kevisual/context'; import { type QueryLoginBrowser } from '@/query/query-login/index.ts' const queryLogin = useContextKey('queryLogin'); type Me = { id?: string; username?: string; nickname?: string | null; needChangePassword?: boolean; role?: string; description?: string | null; type?: 'user' | 'org'; orgs?: string[]; avatar?: string; }; export type LayoutStore = { open: boolean; setOpen: (open: boolean) => void; me: Me; setMe: (me: Me) => void; getMe: () => Promise; openUser: boolean; setOpenUser: (openUser: boolean) => void; switchOrg: (username?: string, type?: 'user' | 'org') => Promise; isAdmin: boolean; setIsAdmin: (isAdmin: boolean) => void; checkHasOrg: () => boolean; }; export const useLayoutStore = create((set, get) => ({ open: false, setOpen: (open) => set({ open }), me: {}, setMe: (me) => set({ me }), getMe: async () => { const res = await queryLogin.getMe(); if (res.code === 200) { set({ me: res.data }); set({ isAdmin: res.data.orgs?.includes('admin') }); } }, openUser: false, setOpenUser: (openUser) => set({ openUser }), switchOrg: async (username?: string, type?: string) => { const res = await queryLogin.switchUser(username || ''); if (res.code === 200) { toast.success('Switch success'); setTimeout(() => { window.location.reload(); }, 1000); } else { toast.error(res.message || 'Request failed'); } }, isAdmin: false, setIsAdmin: (isAdmin) => set({ isAdmin }), checkHasOrg: () => { const user = get().me || {}; if (!user.orgs) { return false; } return user?.orgs?.length > 0; }, }));