'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, Send, Edit } 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, useSubmitRFA } from '@/hooks/use-rfa'; interface RFADetailProps { data: RFA; } export function RFADetail({ data }: RFADetailProps) { const [actionState, setActionState] = useState<'approve' | 'reject' | 'submit' | null>(null); const [comments, setComments] = useState(''); const [templateId, setTemplateId] = useState(1); const processMutation = useProcessRFA(); const submitMutation = useSubmitRFA(); 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 || actionState === 'submit') return; const apiAction = actionState === 'approve' ? 'APPROVE' : 'REJECT'; processMutation.mutate( { uuid: data.publicId, data: { action: apiAction, comments: comments, }, }, { onSuccess: () => { setActionState(null); setComments(''); }, } ); }; const handleSubmit = () => { submitMutation.mutate( { uuid: data.publicId, templateId }, { onSuccess: () => { setActionState(null); }, } ); }; return (
{/* Header / Actions */}

{data.correspondence?.correspondenceNumber || 'RFA'}

{createdAt && (

Created on {format(new Date(createdAt), 'dd MMM yyyy HH:mm')}

)}
{currentRevision?.statusCode?.statusCode === 'DFT' && ( <> )}
{['FAP', 'FRE'].includes(currentRevision?.statusCode?.statusCode ?? '') && (
)}
{/* Submit RFA Dialog */} {actionState === 'submit' && ( Submit RFA to Workflow
setTemplateId(Number(e.target.value))} />

Enter the routing template ID for this submission.

)} {/* Action Input Area */} {actionState && actionState !== 'submit' && ( {actionState === 'approve' ? 'Confirm Approval' : 'Confirm Rejection'}