@pwc-ra/components
Version:
PwC RA shared components library
71 lines (63 loc) • 1.98 kB
text/typescript
import { create } from 'zustand';
import { PageHeaderState } from '@pwc-ra/components';
import type { User } from '@pwc-ra/components';
// 租户类型
interface Tenant {
id: string;
code: string;
name: string;
}
// 全局状态类型
interface GlobalState {
// 用户信息
currentUser: User | null;
// 当前选择的租户
selectedTenant: Tenant | null;
// 加载状态
loading: boolean;
// 错误信息
error: string | null;
// 设置当前用户
setCurrentUser: (user: User | null) => void;
// 设置当前租户
setSelectedTenant: (tenant: Tenant | null) => void;
// 设置加载状态
setLoading: (loading: boolean) => void;
// 设置错误信息
setError: (error: string | null) => void;
// 初始化状态
initialize: () => void;
}
// 创建全局状态管理器
const useGlobalStore = create<GlobalState>((set) => ({
currentUser: PageHeaderState.getCurrentUser(),
selectedTenant: PageHeaderState.getSelectedTenant(),
loading: PageHeaderState.isLoading(),
error: PageHeaderState.getError(),
setCurrentUser: (user) => set({ currentUser: user }),
setSelectedTenant: (tenant) => set({ selectedTenant: tenant }),
setLoading: (loading) => set({ loading }),
setError: (error) => set({ error }),
// 初始化状态,从PageHeaderState获取初始值并订阅更新
initialize: () => {
// 从PageHeaderState获取初始值
set({
currentUser: PageHeaderState.getCurrentUser(),
selectedTenant: PageHeaderState.getSelectedTenant(),
loading: PageHeaderState.isLoading(),
error: PageHeaderState.getError()
});
// 订阅PageHeaderState的更新
PageHeaderState.subscribe((state) => {
set({
currentUser: state.currentUser,
selectedTenant: state.selectedTenant,
loading: state.loading,
error: state.error
});
});
}
}));
// 初始化全局状态
useGlobalStore.getState().initialize();
export default useGlobalStore;