'use client'; import { zodResolver } from '@hookform/resolvers/zod'; import { Button } from '@repo/shadcn/button'; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from '@repo/shadcn/form'; import { Input } from '@repo/shadcn/input'; import { Textarea } from '@repo/shadcn/textarea'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@repo/shadcn/select'; import { useForm } from 'react-hook-form'; import { useCreateTraining } from "../hooks/use-training"; import { TrainingSchema, trainingSchema } from '../schemas/training'; import { SelectSearchable } from '@repo/shadcn/select-searchable' import React from 'react'; import { useStateQuery, useMunicipalityQuery, useParishQuery } from '@/feactures/location/hooks/use-query-location'; const PRODUCTIVE_ACTIVITIES = [ 'Agricola', 'Textil', 'Bloquera', 'Carpinteria', 'Unidad de suministro' ]; interface CreateTrainingFormProps { onSuccess?: () => void; onCancel?: () => void; defaultValues?: Partial; } export function CreateTrainingForm({ onSuccess, onCancel, defaultValues, }: CreateTrainingFormProps) { const { mutate: saveTraining, isPending: isSaving, } = useCreateTraining(); const [state, setState] = React.useState(0); const [municipality, setMunicipality] = React.useState(0); const [disabledMunicipality, setDisabledMunicipality] = React.useState(true); const [disabledParish, setDisabledParish] = React.useState(true); const { data: dataState } = useStateQuery() const { data: dataMunicipality } = useMunicipalityQuery(state) const { data: dataParish } = useParishQuery(municipality) const stateOptions = dataState?.data || [{ id: 0, name: 'Sin estados' }] const municipalityOptions = Array.isArray(dataMunicipality?.data) && dataMunicipality.data.length > 0 ? dataMunicipality.data : [{ id: 0, stateId: 0, name: 'Sin Municipios' }] // const parishOptions = dataParish?.data || [{id:0,municipalityId:0,name:'Sin Parroquias'}] const parishOptions = Array.isArray(dataParish?.data) && dataParish.data.length > 0 ? dataParish.data : [{ id: 0, stateId: 0, name: 'Sin Parroquias' }] const form = useForm({ resolver: zodResolver(trainingSchema), defaultValues: { firstname: defaultValues?.firstname || '', lastname: defaultValues?.lastname || '', visitDate: defaultValues?.visitDate || new Date().toISOString().split('T')[0], productiveActivity: defaultValues?.productiveActivity || '', financialRequirementDescription: defaultValues?.financialRequirementDescription || '', siturCodeCommune: defaultValues?.siturCodeCommune || '', communalCouncil: defaultValues?.communalCouncil || '', siturCodeCommunalCouncil: defaultValues?.siturCodeCommunalCouncil || '', ospName: defaultValues?.ospName || '', ospAddress: defaultValues?.ospAddress || '', ospRif: defaultValues?.ospRif || '', ospType: defaultValues?.ospType || '', currentStatus: defaultValues?.currentStatus || '', companyConstitutionYear: defaultValues?.companyConstitutionYear || new Date().getFullYear(), producerCount: defaultValues?.producerCount || 0, productDescription: defaultValues?.productDescription || '', installedCapacity: defaultValues?.installedCapacity || '', operationalCapacity: defaultValues?.operationalCapacity || '', ospResponsibleFullname: defaultValues?.ospResponsibleFullname || '', ospResponsibleCedula: defaultValues?.ospResponsibleCedula || '', ospResponsibleRif: defaultValues?.ospResponsibleRif || '', ospResponsiblePhone: defaultValues?.ospResponsiblePhone || '', civilState: defaultValues?.civilState || '', familyBurden: defaultValues?.familyBurden || 0, numberOfChildren: defaultValues?.numberOfChildren || 0, generalObservations: defaultValues?.generalObservations || '', ospResponsibleEmail: defaultValues?.ospResponsibleEmail || '', photo1: defaultValues?.photo1 || '', photo2: defaultValues?.photo2 || '', photo3: defaultValues?.photo3 || '', paralysisReason: defaultValues?.paralysisReason || '', state: defaultValues?.state || undefined, municipality: defaultValues?.municipality || undefined, parish: defaultValues?.parish || undefined, }, mode: 'onChange', }); const onSubmit = async (formData: TrainingSchema) => { saveTraining(formData, { onSuccess: () => { form.reset(); onSuccess?.(); }, onError: (e) => { console.error(e); form.setError('root', { type: 'manual', message: 'Error al guardar el registro', }); }, }); }; return (
{form.formState.errors.root && (
{form.formState.errors.root.message}
)}
{/* Datos Personales */}

Datos Básicos

( Nombre )} /> ( Apellido )} /> ( Fecha de la visita )} /> {/* Ubicación */}

Ubicación

( Estado ({ value: item.id.toString(), label: item.name, })) || [] } onValueChange={(value: any) => { field.onChange(Number(value)); setState(value); setDisabledMunicipality(false); setDisabledParish(true) } } placeholder="Selecciona un estado" defaultValue={field.value?.toString()} // disabled={readOnly} /> )} /> ( Municipio ({ value: item.id.toString(), label: item.name, })) || [] } onValueChange={(value: any) => { field.onChange(Number(value)); setMunicipality(value); setDisabledParish(false) } } placeholder="Selecciona un Municipio" defaultValue={field.value?.toString()} disabled={disabledMunicipality} /> )} /> ( Parroquia ({ value: item.id.toString(), label: item.name, })) || [] } onValueChange={(value: any) => field.onChange(Number(value)) } placeholder="Selecciona una Parroquia" defaultValue={field.value?.toString()} disabled={disabledParish} /> )} /> {/* ( Estado )} /> ( Municipio )} /> ( Parroquia )} /> */} ( Código SITUR Comuna )} /> ( Consejo Comunal )} /> ( Código SITUR Consejo Comunal )} /> {/* Datos de la OSP */}

Datos de la Organización Socioproductiva (OSP)

( Nombre de la Organización )} /> ( Dirección )} /> ( RIF )} /> ( Tipo de Organización )} /> ( Actividad Productiva )} /> ( Estatus Actual )} /> ( Año de Constitución )} /> ( Cantidad de Productores )} /> ( Breve descripción del producto o servicio