import { Fragment } from 'react' import { PlusIcon, Trash2Icon } from 'lucide-react' import { useForm, useFieldArray, Controller, useWatch } from 'react-hook-form' import { ErrorMessage } from '@hookform/error-message' import { zodResolver } from '@hookform/resolvers/zod' import { z } from 'zod' import { Form } from '@repo/ui/components/ui/form' import { Input } from '@repo/ui/components/ui/input' import { Button } from '@repo/ui/components/ui/button' import { InputGroup, InputGroupInput } from '@repo/ui/components/ui/input-group' import { Separator } from '@repo/ui/components/ui/separator' import { Cell } from '../_.$orgid.enrollments.add/route' import { CoursePicker } from '../_.$orgid.enrollments.add/course-picker' import { MAX_ITEMS, type Course } from '../_.$orgid.enrollments.add/data' const emptyRow = { course: undefined, quantity: undefined } type BulkProps = { courses: Promise<{ hits: Course[] }> } const item = z.object({ course: z .object( { id: z.string(), name: z.string(), access_period: z.number(), unit_price: z.number() }, { error: 'Escolha um curso' } ) .required(), quantity: z.number() }) const formSchema = z.object({ items: z.array(item).min(1).max(MAX_ITEMS) }) type Schema = z.infer export function Bulk({ courses }: BulkProps) { const form = useForm({ resolver: zodResolver(formSchema), defaultValues: { items: [emptyRow] } }) const { formState, control, handleSubmit } = form const { fields, remove, append } = useFieldArray({ control, name: 'items' }) const items = useWatch({ control, name: 'items' }) const onSubmit = async (data: Schema) => { console.log(data) } return (
{/* Header */} <> Curso Quantidade Valor unit. {/**/} {/* Rows */} {fields.map((field, index) => { const course = items?.[index]?.course return ( (
(

{message}

)} />
)} /> {/* R$ */}
) })}
) } const currency = new Intl.NumberFormat('pt-BR', { style: 'currency', currency: 'BRL' })