mirror of
https://github.com/basketikun/infinite-canvas.git
synced 2026-08-05 17:04:27 +08:00
472bf8b732
Co-Authored-By: Codex <noreply@openai.com>
28 lines
1.3 KiB
TypeScript
28 lines
1.3 KiB
TypeScript
import { create } from "zustand";
|
|
|
|
type CanvasUiStore = {
|
|
editingProjectId: string | null;
|
|
editingProjectTitle: string;
|
|
selectedProjectIds: string[];
|
|
deleteProjectIds: string[];
|
|
startEditingProject: (id: string, title: string) => void;
|
|
setEditingProjectTitle: (title: string) => void;
|
|
stopEditingProject: () => void;
|
|
toggleSelectedProjectId: (id: string, selected: boolean) => void;
|
|
setDeleteProjectIds: (ids: string[]) => void;
|
|
removeSelectedProjectIds: (ids: string[]) => void;
|
|
};
|
|
|
|
export const useCanvasUiStore = create<CanvasUiStore>((set) => ({
|
|
editingProjectId: null,
|
|
editingProjectTitle: "",
|
|
selectedProjectIds: [],
|
|
deleteProjectIds: [],
|
|
startEditingProject: (editingProjectId, editingProjectTitle) => set({ editingProjectId, editingProjectTitle }),
|
|
setEditingProjectTitle: (editingProjectTitle) => set({ editingProjectTitle }),
|
|
stopEditingProject: () => set({ editingProjectId: null }),
|
|
toggleSelectedProjectId: (id, selected) => set((state) => ({ selectedProjectIds: selected ? [...new Set([...state.selectedProjectIds, id])] : state.selectedProjectIds.filter((item) => item !== id) })),
|
|
setDeleteProjectIds: (deleteProjectIds) => set({ deleteProjectIds }),
|
|
removeSelectedProjectIds: (ids) => set((state) => ({ selectedProjectIds: state.selectedProjectIds.filter((id) => !ids.includes(id)) })),
|
|
}));
|