"use client"; import type { RFA, RFAItem } from "@/types/rfa"; import { StatusBadge } from "@/components/common/status-badge"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { format } from "date-fns"; import { ArrowLeft, CheckCircle, XCircle, Loader2 } from "lucide-react"; import Link from "next/link"; import { useState } from "react"; import { Label } from "@/components/ui/label"; import { Textarea } from "@/components/ui/textarea"; import { useProcessRFA } from "@/hooks/use-rfa"; interface RFADetailProps { data: RFA; } export function RFADetail({ data }: RFADetailProps) { const [actionState, setActionState] = useState<"approve" | "reject" | null>(null); const [comments, setComments] = useState(""); const processMutation = useProcessRFA(); const currentRevision = data.revisions.find((revision) => revision.isCurrent) ?? data.revisions[0]; const currentItems = currentRevision?.items ?? []; const currentStatus = currentRevision?.statusCode?.statusName || currentRevision?.statusCode?.statusCode || "Unknown"; const createdAt = data.correspondence?.createdAt || currentRevision?.createdAt; const getDrawingNumber = (item: RFAItem) => item.shopDrawingRevision?.shopDrawing?.drawingNumber || item.asBuiltDrawingRevision?.asBuiltDrawing?.drawingNumber || "-"; const getRevisionLabel = (item: RFAItem) => { if (item.shopDrawingRevision?.revisionLabel) { return item.shopDrawingRevision.revisionLabel; } if (item.shopDrawingRevision?.revisionNumber !== undefined) { return String(item.shopDrawingRevision.revisionNumber); } if (item.asBuiltDrawingRevision?.revisionLabel) { return item.asBuiltDrawingRevision.revisionLabel; } if (item.asBuiltDrawingRevision?.revisionNumber !== undefined) { return String(item.asBuiltDrawingRevision.revisionNumber); } return "-"; }; const getRevisionTitle = (item: RFAItem) => item.shopDrawingRevision?.title || item.asBuiltDrawingRevision?.title || "-"; const handleProcess = () => { if (!actionState) return; const apiAction = actionState === "approve" ? "APPROVE" : "REJECT"; processMutation.mutate( { uuid: data.uuid, data: { action: apiAction, comments: comments, }, }, { onSuccess: () => { setActionState(null); setComments(""); // Query invalidation handled in hook }, } ); }; return (
Created on {format(new Date(createdAt), "dd MMM yyyy HH:mm")}
)}{currentRevision?.description || "No description provided."}
No drawing items linked to this RFA.
) : (| Type | Drawing No. | Revision | Title |
|---|---|---|---|
| {item.itemType} | {getDrawingNumber(item)} | {getRevisionLabel(item)} | {getRevisionTitle(item)} |
Project
{data.correspondence?.project?.projectName || "-"}
Discipline
{data.discipline?.name || data.discipline?.code || "-"}