'use client' import { Button } from '@/components/ui/button' import { Input } from '@/components/ui/input' import { Label } from '@/components/ui/label' import { Loader2 } from 'lucide-react' import { useForm } from 'react-hook-form' import { z } from 'zod' import { zodResolver } from '@hookform/resolvers/zod' import { useToast } from '@/hooks/use-toast' import httpBrowserClient from '@/lib/httpBrowserClient' import { ApiEndpoints } from '@/config/api' import { useMutation } from '@tanstack/react-query' import Link from 'next/link' import { Routes } from '@/config/routes' const changePasswordSchema = z .object({ oldPassword: z.string().min(1, 'Old password is required'), newPassword: z .string() .min(8, { message: 'Password must be at least 8 characters long' }), confirmPassword: z .string() .min(4, { message: 'Please confirm your password' }), }) .superRefine((data, ctx) => { if (data.newPassword !== data.confirmPassword) { ctx.addIssue({ code: z.ZodIssueCode.custom, message: 'Passwords must match', path: ['confirmPassword'], }) } }) type ChangePasswordFormData = z.infer export default function ChangePasswordForm() { const { toast } = useToast() const changePasswordForm = useForm({ resolver: zodResolver(changePasswordSchema), }) const { mutate: changePassword, isPending: isChangingPassword, error: changePasswordError, isSuccess: isChangePasswordSuccess, } = useMutation({ mutationFn: (data: ChangePasswordFormData) => httpBrowserClient.post(ApiEndpoints.auth.changePassword(), data), onSuccess: () => { toast({ title: 'Password changed successfully!', }) changePasswordForm.reset() }, onError: (error) => { const errorMessage = (error as any).response?.data?.error changePasswordForm.setError('root.serverError', { message: errorMessage || 'Failed to change password', }) toast({ title: 'Failed to change password', }) }, }) return ( <>

If you signed in with Google, you can reset your password{' '} here .

changePassword(data))} className='space-y-4' >
{changePasswordForm.formState.errors.oldPassword && (

{changePasswordForm.formState.errors.oldPassword.message}

)}
{changePasswordForm.formState.errors.newPassword && (

{changePasswordForm.formState.errors.newPassword.message}

)}
{changePasswordForm.formState.errors.confirmPassword && (

{changePasswordForm.formState.errors.confirmPassword.message}

)}
{changePasswordForm.formState.errors.root?.serverError && (

{changePasswordForm.formState.errors.root.serverError.message}

)} {isChangePasswordSuccess && (

Password changed successfully!

)}
) }