Files
omniai-web/src/stores/useProjectStore.ts
T

56 lines
1.7 KiB
TypeScript
Raw Normal View History

2026-06-02 12:38:01 +08:00
import { create } from 'zustand';
import type { WebProjectSummary, WebCanvasWorkflow } from '../types';
import { createBlankWorkflow } from '../data/workflows';
2026-06-02 12:38:01 +08:00
interface ProjectState {
projects: WebProjectSummary[];
projectsLoaded: boolean;
canvasWorkflow: WebCanvasWorkflow;
2026-06-02 12:38:01 +08:00
currentCanvasProjectId: string | null;
pendingDeleteProject: WebProjectSummary | null;
deleteProjectSubmitting: boolean;
}
interface ProjectActions {
setProjects: (projects: WebProjectSummary[]) => void;
setProjectsLoaded: (loaded: boolean) => void;
setCanvasWorkflow: (workflow: WebCanvasWorkflow) => void;
2026-06-02 12:38:01 +08:00
setCurrentCanvasProjectId: (id: string | null) => void;
openDeleteProject: (project: WebProjectSummary) => void;
closeDeleteProject: () => void;
setDeleteProjectSubmitting: (submitting: boolean) => void;
clearProjectState: () => void;
}
const initialState: ProjectState = {
projects: [],
projectsLoaded: false,
canvasWorkflow: createBlankWorkflow(),
2026-06-02 12:38:01 +08:00
currentCanvasProjectId: null,
pendingDeleteProject: null,
deleteProjectSubmitting: false,
};
export const useProjectStore = create<ProjectState & ProjectActions>((set) => ({
...initialState,
setProjects: (projects) => set({ projects }),
setProjectsLoaded: (loaded) => set({ projectsLoaded: loaded }),
setCanvasWorkflow: (workflow) => set({ canvasWorkflow: workflow }),
setCurrentCanvasProjectId: (id) => set({ currentCanvasProjectId: id }),
openDeleteProject: (project) => set({ pendingDeleteProject: project }),
closeDeleteProject: () => set({
pendingDeleteProject: null,
deleteProjectSubmitting: false,
}),
setDeleteProjectSubmitting: (submitting) => set({ deleteProjectSubmitting: submitting }),
clearProjectState: () => set(initialState),
}));