import { useState } from "react"; import { useQuery } from "@tanstack/react-query"; import type { IssueDocument } from "@paperclipai/shared"; import { FileQuestion, Loader2 } from "lucide-react"; import { ApiError } from "@/api/client"; import { issuesApi } from "@/api/issues"; import { DocumentAnnotationsCountChip, IssueDocumentAnnotations } from "@/components/IssueDocumentAnnotations"; import { MarkdownBody } from "@/components/MarkdownBody"; import { queryKeys } from "@/lib/queryKeys"; import { documentDisplayTitle } from "@/lib/issue-artifacts"; import { useLocation } from "@/lib/router"; export function TaskDocumentPanel({ issueId, documentKey, initialDocument, }: { issueId: string; documentKey: string; initialDocument?: IssueDocument; }) { const location = useLocation(); const [annotationPanelOpen, setAnnotationPanelOpen] = useState(false); const query = useQuery({ queryKey: [...queryKeys.issues.documents(issueId), documentKey], queryFn: async () => { try { return await issuesApi.getDocument(issueId, documentKey); } catch (error) { if (error instanceof ApiError && error.status === 404) return null; throw error; } }, initialData: initialDocument, }); if (query.isLoading) { return (
Loading document…
); } if (query.isError) { return (
The document could not be loaded. Retry from the tab launcher or refresh the task.
); } const document = query.data; if (!document) { return (

Document no longer available

This tab is preserved so the missing resource is explicit. Close it or choose another document.

); } return (

{documentDisplayTitle(document)}

{`Revision ${document.latestRevisionNumber ?? 1}`} · {`Updated ${new Date(document.updatedAt).toLocaleString()}`} setAnnotationPanelOpen((open) => !open)} />
{document.body.trim() ? ( {document.body} ) : (

Document is empty.

)}
); }