"use client"; import { zodResolver } from "@hookform/resolvers/zod"; import { useRouter } from "next/navigation"; import { useForm } from "react-hook-form"; import { KeyRound, Loader2 } from "lucide-react"; import { z } from "zod"; import { PasswordField } from "@/components/ui/password-field"; import { PasswordStrengthMeter } from "@/components/ui/password-strength-meter"; import { authErrorMessage, useChangePassword } from "@/hooks/use-auth"; const changePasswordSchema = z.object({ currentPassword: z.string().min(1, "Enter your current password"), newPassword: z .string() .min(10, "Must be at least 10 characters") .refine((v) => /[a-zA-Z]/.test(v) && /\d/.test(v), { message: "Must contain at least one letter and one digit", }), }); type ChangePasswordForm = z.infer; export default function ChangePasswordPage() { const router = useRouter(); const changePassword = useChangePassword(); const { register, handleSubmit, watch, formState: { errors }, } = useForm({ resolver: zodResolver(changePasswordSchema) }); const onSubmit = handleSubmit(async (values) => { try { await changePassword.mutateAsync({ current_password: values.currentPassword, new_password: values.newPassword, }); router.replace("/dashboard"); } catch { // Surfaced via changePassword.isError below. } }); return (

Change your password

An admin requires a new password before you can continue.

{changePassword.isError && (

{authErrorMessage(changePassword.error)}

)}
); }