"use client"; import { useForm, useFieldArray } 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 { Label } from "@/components/ui/label"; import { Card } from "@/components/ui/card"; import { Plus, Trash2, Loader2 } from "lucide-react"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { useRouter } from "next/navigation"; import { useCreateRFA } from "@/hooks/use-rfa"; import { useDisciplines } from "@/hooks/use-master-data"; import { useState } from "react"; const rfaItemSchema = z.object({ item_no: z.string().min(1, "Item No is required"), description: z.string().min(3, "Description is required"), quantity: z.number({ invalid_type_error: "Quantity must be a number" }).min(0), unit: z.string().min(1, "Unit is required"), }); const rfaSchema = z.object({ subject: z.string().min(5, "Subject must be at least 5 characters"), description: z.string().optional(), contract_id: z.number({ required_error: "Contract is required" }), discipline_id: z.number({ required_error: "Discipline is required" }), items: z.array(rfaItemSchema).min(1, "At least one item is required"), }); type RFAFormData = z.infer; export function RFAForm() { const router = useRouter(); const createMutation = useCreateRFA(); // Fetch Disciplines (Assuming Contract 1 for now, or dynamic) const selectedContractId = 1; const { data: disciplines, isLoading: isLoadingDisciplines } = useDisciplines(selectedContractId); const { register, control, handleSubmit, setValue, formState: { errors }, } = useForm({ resolver: zodResolver(rfaSchema), defaultValues: { contract_id: 1, items: [{ item_no: "1", description: "", quantity: 0, unit: "" }], }, }); const { fields, append, remove } = useFieldArray({ control, name: "items", }); const onSubmit = (data: RFAFormData) => { createMutation.mutate(data as any, { onSuccess: () => { router.push("/rfas"); }, }); }; return (
{/* Basic Info */}

RFA Information

{errors.subject && (

{errors.subject.message}

)}
{errors.contract_id && (

{errors.contract_id.message}

)}
{errors.discipline_id && (

{errors.discipline_id.message}

)}
{/* RFA Items */}

RFA Items

{fields.map((field, index) => (

Item #{index + 1}

{fields.length > 1 && ( )}
{errors.items?.[index]?.item_no && (

{errors.items[index]?.item_no?.message}

)}
{errors.items?.[index]?.description && (

{errors.items[index]?.description?.message}

)}
{errors.items?.[index]?.quantity && (

{errors.items[index]?.quantity?.message}

)}
{errors.items?.[index]?.unit && (

{errors.items[index]?.unit?.message}

)}
))}
{errors.items?.root && (

{errors.items.root.message}

)}
{/* Actions */}
); }