Skip to content

Docs

The docs module provides a collaborative document editor with folder organization, supporting both personal documents and hub-scoped documents.

Module path: src/lib/modules/docs/ Routes: /docs, /docs/[id]

interface Doc {
id: string;
title: string;
type: DocType; // 'document' | 'list' | 'board' | 'calendar'
description?: string;
status: DocumentStatus; // 'active' | 'draft' | 'deleted'
createdAt: Timestamp;
createdBy: string;
hubId: string;
folderId?: string;
}
interface Folder {
id: string;
name: string;
hubId: string;
position: number;
createdAt: Timestamp;
createdBy: string;
status: FolderStatus; // 'active' | 'draft' | 'deleted'
}

Unlike blogs (which store content as JSON in Firestore), docs use a split storage approach:

  • Metadata: Firestore (documents/{docId} or hubs/{hubId}/documents/{docId})
  • Content: Firebase Realtime Database (for real-time sync capabilities)

Controller: src/lib/modules/docs/components/doc-editor.svelte.ts

Same EditorJS tools as the blog editor. Key differences:

  • Document discovery searches personal collection first, then all hubs
  • Content synced via Realtime Database
  • Title updates handle personal vs hub document paths
docsManager.createDoc(title, type, options);
docsManager.updateDocName(docId, newTitle);
docsManager.updateDocContent(docId, content);
docsManager.deleteDoc(docId);
docsManager.softDeleteDoc(docId); // status: 'deleted'
docsManager.selectDocItem(itemId, multi?);

Alternative store using Firestore + Realtime Database:

  • Tracks current document for editing
  • Manages active/draft/deleted documents
ComponentPurpose
doc-editor.svelteEditorJS editor for documents
docs-grid-view.svelteMain grid (personal + hubs)
docs-personal-grid.sveltePersonal docs section
docs-hub-grid.svelteHub docs section
docs-dialogs.svelteCreate/update/delete dialogs
doc-form.svelteDocument create/update form
folder-form.svelteFolder create/update form
hub-doc-card.svelteDocument card display
hub-folder-card.svelteFolder card display
ContextFirestore PathDescription
Personaldocuments/{docId}User’s own documents
Hubhubs/{hubId}/documents/{docId}Documents within a hub

The editor auto-discovers documents by searching personal collection first, then hub collections.