'use client'; import { useState } from 'react'; import { CorrespondenceDetail } from '@/components/correspondences/detail'; import { IntegratedBanner } from '@/components/workflow/integrated-banner'; import { WorkflowLifecycle } from '@/components/workflow/workflow-lifecycle'; import { FilePreviewModal } from '@/components/common/file-preview-modal'; import { WorkflowErrorBoundary } from '@/components/common/workflow-error-boundary'; import { useCorrespondence, useWorkflowHistory } from '@/hooks/use-correspondence'; import { Loader2 } from 'lucide-react'; import { useParams, useSearchParams } from 'next/navigation'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; import type { Correspondence } from '@/types/correspondence'; import type { WorkflowAttachmentSummary } from '@/types/workflow'; export default function CorrespondenceDetailPage() { const params = useParams(); const searchParams = useSearchParams(); const uuid = (params?.uuid as string) ?? ''; const selectedRevisionId = searchParams.get('revId') ?? undefined; // Hooks ทั้งหมดต้องเรียกก่อน early return (Rules of Hooks) const { data: correspondence, isLoading, isError } = useCorrespondence(uuid); const corrData = correspondence as Correspondence | undefined; // ADR-021: ดึงประวัติ Workflow (disabled อัตโนมัติถ้าไม่มี workflowInstanceId) const { data: wfHistory, isLoading: wfLoading, error: wfError } = useWorkflowHistory( corrData?.workflowInstanceId ); // ADR-021 US4: state สำหรับ FilePreviewModal const [previewFile, setPreviewFile] = useState(null); // ADR-021 T029: publicIds ของไฟล์ที่อัปโหลดใน WorkflowLifecycle Upload Zone const [pendingAttachmentIds, setPendingAttachmentIds] = useState([]); // ADR-021 T041: ติดตาม publicIds ที่ Storage แจ้ง 404 const [unavailableIds, setUnavailableIds] = useState([]); const handleUnavailable = (publicId: string) => setUnavailableIds((prev) => [...new Set([...prev, publicId])]); if (!uuid) { return (

Invalid Correspondence UUID

); } if (isLoading) { return (
); } if (isError || !correspondence) { return (

Failed to load correspondence

Please try again later or verify the UUID.

); } // ดึง Current Revision สำหรับแสดงใน Banner const currentRevision = corrData!.revisions?.find((r) => r.isCurrent) ?? corrData!.revisions?.[0]; const docNo = corrData!.correspondenceNumber ?? ''; const subject = currentRevision?.subject ?? ''; const status = currentRevision?.status?.statusCode ?? ''; return (
{/* ADR-021: Integrated Banner — เลขเอกสาร + สถานะ + ปุ่ม Action */} {/* Tabs — Details / Workflow (WorkflowLifecycle ถูกเพิ่มใน T020) */} รายละเอียด Workflow {/* ADR-021 US4: File Preview Modal */} setPreviewFile(null)} onUnavailable={handleUnavailable} />
); }