'use client'; import { useParams, useRouter, notFound } from 'next/navigation'; import { useRFA, useUpdateRFA } from '@/hooks/use-rfa'; import { Loader2 } from 'lucide-react'; import { useForm } from 'react-hook-form'; import { zodResolver } from '@hookform/resolvers/zod'; import { z } from 'zod'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Textarea } from '@/components/ui/textarea'; import { Label } from '@/components/ui/label'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { UpdateRfaDto } from '@/types/dto/rfa/rfa.dto'; import { useEffect } from 'react'; const editRfaSchema = z.object({ subject: z.string().min(5, 'Subject must be at least 5 characters'), description: z.string().optional(), body: z.string().optional(), remarks: z.string().optional(), dueDate: z.string().optional(), }); type EditRfaFormValues = z.infer; export default function RFAEditPage() { const { uuid } = useParams(); const router = useRouter(); if (!uuid) notFound(); const { data: rfa, isLoading, isError } = useRFA(String(uuid)); const updateMutation = useUpdateRFA(); const currentRevision = rfa?.revisions?.find((r: { isCurrent: boolean }) => r.isCurrent) ?? rfa?.revisions?.[0]; const form = useForm({ resolver: zodResolver(editRfaSchema), defaultValues: { subject: '', description: '', body: '', remarks: '', dueDate: '', }, }); useEffect(() => { if (currentRevision) { form.reset({ subject: currentRevision.subject ?? '', description: currentRevision.description ?? '', body: currentRevision.body ?? '', remarks: currentRevision.remarks ?? '', dueDate: currentRevision.dueDate ? currentRevision.dueDate.slice(0, 10) : '', }); } }, [currentRevision, form]); if (isLoading) { return (
); } if (isError || !rfa) { return
RFA not found.
; } if (currentRevision?.statusCode?.statusCode !== 'DFT') { return (
Only DRAFT RFAs can be edited.{' '}
); } const onSubmit = (values: EditRfaFormValues) => { const dto: UpdateRfaDto = { subject: values.subject, description: values.description || undefined, body: values.body || undefined, remarks: values.remarks || undefined, dueDate: values.dueDate || undefined, }; updateMutation.mutate( { uuid: String(uuid), data: dto }, { onSuccess: () => { router.push(`/rfas/${String(uuid)}`); }, } ); }; return (

Edit RFA

{rfa.correspondence?.correspondenceNumber || 'Draft RFA'}

Revision Details
{form.formState.errors.subject && (

{form.formState.errors.subject.message}

)}