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<typeof userSchema> = {
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<typeof userSchema>) => {
const changedValues = getChangedFields(data);
if (!Object.values(changedValues)?.length) {
return;
}
updateUser({ ...changedValues, id: selectedUser?.userId } as any);
};
return {
form,
isInputChanged,
isPending,
handleSubmit,
};
};