"use client"; import { useMemo } from "react"; import Link from "next/link"; import { useParams, useRouter } from "next/navigation"; import { FileText, Plus } from "lucide-react"; import { api } from "@/lib/trpc"; import { Button } from "@/components/ui/button"; function formatUpdatedAt(value: Date | string): string { const date = value instanceof Date ? value : new Date(value); if (Number.isNaN(date.getTime())) return String(value); return date.toLocaleString(); } export default function DocsPage() { const params = useParams(); const router = useRouter(); const utils = api.useUtils(); const workspaceSlug = typeof params?.workspaceSlug === "string" ? params.workspaceSlug : undefined; const listQuery = api.objects.list.useQuery( { workspace: workspaceSlug!, parentId: undefined, limit: 200 }, { enabled: Boolean(workspaceSlug) }, ); const createMutation = api.objects.create.useMutation({ onSuccess: (created) => { if (workspaceSlug) { void utils.objects.list.invalidate({ workspace: workspaceSlug }); router.push(`/${workspaceSlug}/docs/${created.id}`); } }, }); const documents = useMemo(() => { const rows = listQuery.data?.objects ?? []; return rows .filter((o) => o.type === "document") .slice() .sort((a, b) => { const ta = new Date(a.updatedAt).getTime(); const tb = new Date(b.updatedAt).getTime(); return tb - ta; }); }, [listQuery.data?.objects]); return (

Documents

{listQuery.isLoading ? (

Loading documents…

) : documents.length === 0 ? (
No documents yet. Create one to get started.
) : ( )}
); }