import { zodResolver } from "@hookform/resolvers/zod" import { useMutation } from "@tanstack/react-query" import { useForm } from "react-hook-form" import { z } from "zod" import { type UpdatePassword, UsersService } from "@/client" import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from "@/components/ui/form" import { LoadingButton } from "@/components/ui/loading-button" import { PasswordInput } from "@/components/ui/password-input" import useCustomToast from "@/hooks/useCustomToast" import { handleError } from "@/utils" const formSchema = z .object({ current_password: z .string() .min(1, { message: "Password is required" }) .min(8, { message: "Password must be at least 8 characters" }), new_password: z .string() .min(1, { message: "Password is required" }) .min(8, { message: "Password must be at least 8 characters" }), confirm_password: z .string() .min(1, { message: "Password confirmation is required" }), }) .refine((data) => data.new_password === data.confirm_password, { message: "The passwords don't match", path: ["confirm_password"], }) type FormData = z.infer const ChangePassword = () => { const { showSuccessToast, showErrorToast } = useCustomToast() const form = useForm({ resolver: zodResolver(formSchema), mode: "onSubmit", criteriaMode: "all", defaultValues: { current_password: "", new_password: "", confirm_password: "", }, }) const mutation = useMutation({ mutationFn: (data: UpdatePassword) => UsersService.updatePasswordMe({ body: data }), onSuccess: () => { showSuccessToast("Password updated successfully") form.reset() }, onError: handleError.bind(showErrorToast), }) const onSubmit = async (data: FormData) => { mutation.mutate(data) } return (

Change Password

( Current Password )} /> ( New Password )} /> ( Confirm Password )} /> Update Password
) } export default ChangePassword