44 lines
1.1 KiB
TypeScript
44 lines
1.1 KiB
TypeScript
/**
|
|
* 工作空间状态管理
|
|
*/
|
|
import { create } from 'zustand';
|
|
import { Workspace } from '@/api/workspace';
|
|
|
|
interface WorkspaceState {
|
|
currentWorkspace: Workspace | null;
|
|
workspaces: Workspace[];
|
|
|
|
// Actions
|
|
setCurrentWorkspace: (workspace: Workspace | null) => void;
|
|
setWorkspaces: (workspaces: Workspace[]) => void;
|
|
addWorkspace: (workspace: Workspace) => void;
|
|
removeWorkspace: (workspaceId: string) => void;
|
|
}
|
|
|
|
export const useWorkspaceStore = create<WorkspaceState>((set) => ({
|
|
currentWorkspace: null,
|
|
workspaces: [],
|
|
|
|
setCurrentWorkspace: (workspace) => {
|
|
set({ currentWorkspace: workspace });
|
|
},
|
|
|
|
setWorkspaces: (workspaces) => {
|
|
set({ workspaces });
|
|
},
|
|
|
|
addWorkspace: (workspace) => {
|
|
set((state) => ({
|
|
workspaces: [...state.workspaces, workspace],
|
|
}));
|
|
},
|
|
|
|
removeWorkspace: (workspaceId) => {
|
|
set((state) => ({
|
|
workspaces: state.workspaces.filter((w) => w.id !== workspaceId),
|
|
currentWorkspace:
|
|
state.currentWorkspace?.id === workspaceId ? null : state.currentWorkspace,
|
|
}));
|
|
},
|
|
}));
|