import { useState, useEffect } from "react"; import { z } from "zod"; import { trpc } from "@/app/_trpc/client"; import { useToast } from "@/components/ui/use-toast"; import { useRouter } from "next/navigation"; import useFormHandler from "@/hooks/useFormHandler"; import { userSchema } from "@/lib/schemas/userSchema"; import { User } from "@/server/user/domain/models"; import { Users } from "lucide-react"; interface UpdateUserHookProps { selectedUser: { userId: string; currentRol: any; email: string; firstName: string; lastName: string; }; onClose: () => void; handleUpdateUser:(userList:User)=>void; users:User[] } export const useUpdateUserForm = ({ selectedUser, onClose, users, handleUpdateUser }: UpdateUserHookProps) => { const { toast } = useToast(); const router = useRouter(); const utils = trpc.useUtils(); const defaultValues: z.infer = { id:selectedUser?.userId, firstName: selectedUser?.firstName || "", lastName: selectedUser?.lastName || "", email: selectedUser?.email || "", rol: selectedUser?.currentRol, }; const { form, isInputChanged, setIsInputChanged, getChangedFields } = useFormHandler(userSchema, defaultValues); const { mutate: updateUser, isPending } = trpc.users.updateUser.useMutation({ onSuccess: (data) => { handleUpdateUser(data as any) toast({ title: "Éxito", description: "Usuario actualizado con éxito", }); onClose(); setIsInputChanged(false); }, onError: (opts) => { toast({ title: "Error", description: opts?.message, variant: "destructive", }); }, }); useEffect(() => { if (!selectedUser) return; form.setValue("email", selectedUser.email); form.setValue("firstName", selectedUser.firstName); form.setValue("lastName", selectedUser.lastName); form.setValue("rol", selectedUser.currentRol); }, [selectedUser, form]); const handleSubmit = (data: z.infer) => { const changedValues = getChangedFields(data); if (!Object.values(changedValues)?.length) { return; } updateUser({ ...changedValues, id: selectedUser?.userId } as any); }; return { form, isInputChanged, isPending, handleSubmit, }; };