/** * CanvasEditorPage — Canvas editor for a single document. * * Gets docId from URL params and renders the CanvasView editor * connected to the CanvasRoom DO via useCanvas. * * Installed at: src/pages/canvas/[docId].tsx */ import { useMemo } from 'react' import { useParams, useNavigate } from 'react-router-dom' import { useQuery } from 'deepspace' import { CanvasView } from '../../components/canvas/CanvasView' // ============================================================================ // Types // ============================================================================ interface CanvasDocument { title: string ownerId: string } // ============================================================================ // Main Page // ============================================================================ export default function CanvasEditorPage() { const { docId } = useParams<{ docId: string }>() const navigate = useNavigate() const { records: canvases, status } = useQuery('canvases', { orderBy: 'createdAt', orderDir: 'desc', }) const selectedCanvas = useMemo( () => docId ? canvases.find((c) => c.recordId === docId) : null, [canvases, docId], ) const isLoading = status === 'loading' if (isLoading) { return (
) } if (!selectedCanvas) { return (

Canvas not found

) } return (
{/* Back header */}

{selectedCanvas.data.title}

) }