"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 workspaceId = typeof params?.workspaceSlug === "string" ? params.workspaceSlug : undefined; const listQuery = api.objects.list.useQuery( { workspaceId: workspaceId!, parentId: undefined, limit: 200 }, { enabled: Boolean(workspaceId) }, ); const createMutation = api.objects.create.useMutation({ onSuccess: (created) => { if (workspaceId) { void utils.objects.list.invalidate({ workspaceId }); router.push(`/${workspaceId}/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 (
Loading documents…
) : documents.length === 0 ? (