UNPKG

@eventcatalogtest/studio

Version:

A drag and drop UI for distributed systems that keeps your diagrams where they belong – in your repo

77 lines (68 loc) 1.97 kB
import { create } from 'zustand' import { persist, createJSONStorage } from 'zustand/middleware' import { Descendant } from 'slate' interface Document { id: string name: string content: Descendant[] createdAt: string updatedAt: string } interface DocumentStore { currentDocument: Document | null isDocumentPanelOpen: boolean toggleDocumentPanel: () => void setDocumentPanelOpen: (open: boolean) => void getCurrentDocument: () => Document setCurrentDocument: (document: Document) => void updateCurrentDocumentContent: (content: Descendant[]) => void } const createEmptyDocument = (name = 'Untitled Document'): Document => ({ id: `doc-${Date.now()}`, name, content: [ { type: 'paragraph', children: [{ text: '' }], } as any, ], createdAt: new Date().toISOString(), updatedAt: new Date().toISOString(), }) export const useDocumentStore = create<DocumentStore>()( persist( (set, get) => ({ currentDocument: createEmptyDocument(), isDocumentPanelOpen: false, getCurrentDocument: () => { const current = get().currentDocument return current || createEmptyDocument() }, setCurrentDocument: (document: Document) => { set({ currentDocument: document }) }, updateCurrentDocumentContent: (content: Descendant[]) => { const current = get().currentDocument if (current) { set({ currentDocument: { ...current, content, updatedAt: new Date().toISOString() } }) } }, toggleDocumentPanel: () => { set((state) => ({ isDocumentPanelOpen: !state.isDocumentPanelOpen })) }, setDocumentPanelOpen: (open: boolean) => { set({ isDocumentPanelOpen: open }) }, }), { name: 'document-storage', storage: createJSONStorage(() => localStorage), } ) )