findyourpilot/src/lib/hooks/user/useLogin.tsx

60 lines
1.3 KiB
TypeScript

import { useMutation } from "@tanstack/react-query"
import { useNavigate } from "@tanstack/react-router"
import { toast } from "sonner"
import type z from "zod"
import { loginUser } from "@/lib/db/user"
import { loginFormSchema } from "@/lib/validation/user"
import { useValidation } from "../useValidation"
type TLoginForm = z.infer<typeof loginFormSchema>
export const useLogin = () => {
const navigate = useNavigate()
const { errors, validate } = useValidation({
defaultSchema: loginFormSchema
})
const loginMutation = useMutation({
mutationKey: ["login"],
mutationFn: async (data: TLoginForm) => {
const response = await loginUser({
data
})
if (response.error) {
throw new Error(response.message)
}
},
onMutate: () => {
toast.loading("Logging in...", { id: "login" })
},
onSuccess: () => {
toast.success("Login successful! Redirecting to posts..", { id: "login" })
navigate({
to: "/post"
})
},
onError: (error) => {
toast.error(error.message, { id: "login" })
}
})
const validateLogin = (formData: TLoginForm) => {
const isValid = validate({
formData
})
if (!isValid) {
toast.error("Error en el formulario.")
return false
}
loginMutation.mutate(formData)
}
return {
login: validateLogin,
isPending: loginMutation.isPending,
errors: errors
}
}