import { useState } from "react"; import { useQuery } from "@tanstack/react-query"; import { Check, Copy, Download } from "lucide-react"; import { fileResourcesApi } from "@/api/file-resources"; import { FileViewerBody, FileViewerMetadataRow } from "@/components/FileViewerSheet"; import { Button } from "@/components/ui/button"; import type { FileViewerUrlState } from "@/context/FileViewerContext"; import { copyTextToClipboard } from "@/lib/clipboard"; import { queryKeys } from "@/lib/queryKeys"; import type { TaskSidePanelTabPayload } from "@/lib/task-side-panel-state"; type WorkspaceFilePayload = Extract; export function TaskWorkspaceFilePanel({ issueId, payload, onFallbackToProject, }: { issueId: string; payload: WorkspaceFilePayload; onFallbackToProject?: () => void; }) { const [copied, setCopied] = useState(false); const [announcement, setAnnouncement] = useState(""); const state: FileViewerUrlState = { path: payload.path, workspace: payload.workspace, projectId: payload.projectId, workspaceId: payload.workspaceId, line: payload.line, column: payload.column, }; const resourceQuery = useQuery({ queryKey: queryKeys.issues.fileResource(issueId, state), queryFn: () => fileResourcesApi.resolve(issueId, state), retry: false, }); const resource = resourceQuery.data; const contentQuery = useQuery({ queryKey: queryKeys.issues.fileResourceContent(issueId, state), queryFn: () => fileResourcesApi.content(issueId, state), enabled: resource?.capabilities.preview === true, retry: false, }); const downloadUrl = resource?.capabilities.download ? fileResourcesApi.downloadUrl(issueId, state) : null; return (

{resource?.title ?? payload.path}

{payload.path}

{contentQuery.data ? ( ) : null} {downloadUrl ? ( ) : null}
{announcement}
{ void resourceQuery.refetch(); if (resource?.capabilities.preview) void contentQuery.refetch(); }} onSetAnnouncement={setAnnouncement} onFallbackToProject={onFallbackToProject ?? null} />
); }