1"use client";
2
3
14import { create } from "zustand";
15
16interface EditorState {
17 activePageId: string | null;
18 selectedBlockId: string | null;
19
20 focusBlockId: string | null;
21
22 editorReady: boolean;
23
24 selectedBlockIds: string[];
25 setActivePage: (pageId: string | null) => void;
26 setSelection: (blockId: string | null) => void;
27 setFocus: (blockId: string | null) => void;
28 setReady: (ready: boolean) => void;
29
30 toggleSelected: (blockId: string) => void;
31
32 setManySelected: (blockIds: string[]) => void;
33 reset: () => void;
34}
35
36export const useEditorStore = create<EditorState>()((set) => ({
37 activePageId: null,
38 selectedBlockId: null,
39 focusBlockId: null,
40 editorReady: false,
41 selectedBlockIds: [],
42 setActivePage: (activePageId) =>
43 set({ activePageId, selectedBlockId: null, focusBlockId: null, editorReady: false, selectedBlockIds: [] }),
44 setSelection: (selectedBlockId) => set({ selectedBlockId }),
45 setFocus: (focusBlockId) => set({ focusBlockId }),
46 setReady: (editorReady) => set({ editorReady }),
47 toggleSelected: (blockId) =>
48 set((s) => ({
49 selectedBlockIds: s.selectedBlockIds.includes(blockId)
50 ? s.selectedBlockIds.filter((id) => id !== blockId)
51 : [...s.selectedBlockIds, blockId]
52 })),
53 setManySelected: (selectedBlockIds) => set({ selectedBlockIds }),
54 reset: () =>
55 set({ activePageId: null, selectedBlockId: null, focusBlockId: null, editorReady: false, selectedBlockIds: [] })
56}));
57