'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 { // Select, // SelectContent, // SelectItem, // SelectTrigger, // SelectValue, // } from '@repo/shadcn/select'; import { SelectSearchable } from '@repo/shadcn/select-searchable' import { useForm } from 'react-hook-form'; import { useUpdateProfile } from "@/feactures/users/hooks/use-mutation-users"; import { UpdateUser, updateUser } from '@/feactures/users/schemas/users'; import { toast } from 'sonner'; import React from 'react'; import { useStateQuery, useMunicipalityQuery, useParishQuery } from '@/feactures/location/hooks/use-query-location'; interface UserFormProps { onSuccess?: () => void; onCancel?: () => void; defaultValues?: Partial; } export function ModalForm({ onSuccess, onCancel, defaultValues, }: UserFormProps) { const { mutate: saveAccountingAccounts, isPending: isSaving, isError, } = useUpdateProfile(); 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 defaultformValues = { username: defaultValues?.username || '', fullname: defaultValues?.fullname || '', email: defaultValues?.email || '', password: '', id: defaultValues?.id, phone: defaultValues?.phone || '', role: undefined, isActive: defaultValues?.isActive, state: defaultValues?.state, municipality: defaultValues?.municipality, parish: defaultValues?.parish } // console.log(defaultValues); const form = useForm({ resolver: zodResolver(updateUser), defaultValues: defaultformValues, mode: 'onChange', // Enable real-time validation }); const onSubmit = async (data: UpdateUser) => { const formData = data saveAccountingAccounts(formData, { onSuccess: () => { form.reset(); onSuccess?.(); toast.success('Actualizado exitosamente!'); }, onError: (e) => { form.setError('root', { type: 'manual', message: e.message, }); // toast.error(e.message); }, }); }; return (
{form.formState.errors.root && (
{form.formState.errors.root.message}
)}
( Nombre completo )} /> ( Correo )} /> ( Teléfono )} /> ( 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} /> )} /> ( Nueva Contraseña )} />
); }