import { create } from "zustand" import { persist } from "zustand/middleware" interface RbacDataItem { app: string cat: string platform: string tenant: string permission: { [x: string]: { [y: string]: [boolean, any, string] } } } interface UserState { tenant: string user_info: { [x: string]: string } rbac: { data: RbacDataItem[] } needResetPassword: boolean access_token: string refresh_token: string setUserInfo: ( tenant: string, user_info: { [x: string]: string }, rbac: { data: RbacDataItem[] } ) => void removeUserInfo: () => void refreshToken: (params: { access_token: string refresh_token: string }) => void setNeedResetPassword: (needResetPassword: boolean) => void } const initialUserState = { tenant: "", user_info: {}, rbac: { data: [], }, needResetPassword: false, access_token: "", refresh_token: "", } export const useUserStore = create( persist( (set) => ({ tenant: initialUserState.tenant, user_info: initialUserState.user_info, rbac: initialUserState.rbac, needResetPassword: initialUserState.needResetPassword, access_token: initialUserState.access_token, refresh_token: initialUserState.refresh_token, setUserInfo: (tenant, user_info, rbac) => set((state) => { return { ...state, tenant: tenant, user_info: user_info, rbac: rbac } }), removeUserInfo: () => set((state) => { return { ...state, ...initialUserState } }), setNeedResetPassword: (needResetPassword) => set((state) => { return { ...state, needResetPassword: needResetPassword } }), refreshToken: ({ access_token, refresh_token }) => set((state) => { return { ...state, access_token, refresh_token } }), }), { name: "user-store", } ) )