"use client"; import { useState, useTransition } from "react"; import { updateUserPassword, type FormData, } from "@/actions/update-user-password"; import { zodResolver } from "@hookform/resolvers/zod"; import { User } from "@prisma/client"; import { useSession } from "next-auth/react"; import { useTranslations } from "next-intl"; import { useForm } from "react-hook-form"; import { toast } from "sonner"; import { userPasswordSchema } from "@/lib/validations/user"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { SectionColumns } from "@/components/dashboard/section-columns"; import { Icons } from "@/components/shared/icons"; interface UserPasswordFormProps { user: Pick; } export function UserPasswordForm({ user }: UserPasswordFormProps) { const { update } = useSession(); const [updated, setUpdated] = useState(false); const [isPending, startTransition] = useTransition(); const updateUserPasswordWithId = updateUserPassword.bind(null, user.id); const t = useTranslations("Setting"); const checkUpdate = (value: string) => { setUpdated(value !== ""); }; const { handleSubmit, register, formState: { errors }, } = useForm({ resolver: zodResolver(userPasswordSchema), defaultValues: { password: "", }, }); const onSubmit = handleSubmit((data) => { startTransition(async () => { const { status } = await updateUserPasswordWithId(data); if (status !== "success") { toast.error("Something went wrong.", { description: "Your password was not updated. Please try again.", }); } else { await update(); setUpdated(false); toast.success("Your password has been updated."); } }); }); return (
checkUpdate(e.target.value)} />
{errors?.password && (

{errors.password.message}

)}

{t("At least 6 characters, Max 32 characters")}

); }