"use client"; 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 { useRouter } from "next/navigation"; import { useProcessRFA } from "@/hooks/use-rfa"; interface RFADetailItem { id: number; itemNo: string; description: string; quantity: number; unit: string; status?: string; } interface RFADetailData { uuid: string; rfaNumber: string; subject: string; description?: string; status: string; createdAt: string; contractName?: string; disciplineName?: string; items: RFADetailItem[]; } interface RFADetailProps { data: RFADetailData; } export function RFADetail({ data }: RFADetailProps) { const router = useRouter(); const [actionState, setActionState] = useState<"approve" | "reject" | null>(null); const [comments, setComments] = useState(""); const processMutation = useProcessRFA(); 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(data.createdAt), "dd MMM yyyy HH:mm")}
{data.description || "No description provided."}
| Item No. | Description | Qty | Unit | Status |
|---|---|---|---|---|
| {item.itemNo} | {item.description} | {item.quantity} | {item.unit} |
|
Contract
{data.contractName}
Discipline
{data.disciplineName}