"use client"; import { Box, Flex, Input, Link as ChakraLink, Text, ClientOnly, } from "@chakra-ui/react"; import signUpImage from "../../../../../public/assets/img/sign-up-image.png"; import { Button } from "@/components/ui/buttons/button"; import { Field } from "@/components/ui/forms/field"; import { useTranslations } from "next-intl"; import { useForm } from "react-hook-form"; import * as yup from "yup"; import { yupResolver } from "@hookform/resolvers/yup"; import { InputGroup } from "@/components/ui/forms/input-group"; import { BiLock, BiUser } from "react-icons/bi"; import { Link } from "@/i18n/navigation"; import { MdMail } from "react-icons/md"; import { useRouter } from "next/navigation"; import { PasswordInput } from "@/components/ui/forms/password-input"; import { Skeleton } from "@/components/ui/feedback/skeleton"; import { authService } from "@/lib/api/auth/service"; import { useState } from "react"; import { signIn } from "next-auth/react"; import { toaster } from "@/components/ui/feedback/toaster"; const schema = yup.object({ name: yup.string().required(), email: yup.string().email().required(), password: yup.string().min(8).required(), }); type SignUpForm = yup.InferType; export default function SignUpForm() { const t = useTranslations(); const router = useRouter(); const [isSubmitting, setIsSubmitting] = useState(false); const { handleSubmit, register, formState: { errors }, } = useForm({ resolver: yupResolver(schema), mode: "onChange" }); const onSubmit = async (formData: SignUpForm) => { setIsSubmitting(true); try { await authService.register({ email: formData.email, password: formData.password, firstName: formData.name, lastName: "", }); const res = await signIn("credentials", { redirect: false, email: formData.email, password: formData.password, }); if (res?.error) { throw new Error(res.error); } router.replace("/home"); } catch (error) { if (error instanceof Error && error.message) { toaster.error({ title: error.message, type: "error", }); } // other errors are handled by api-service interceptor (toast + 422 display) } finally { setIsSubmitting(false); } return formData; }; return ( {t("auth.create-an-account-now")} }> }> }> }> {t("auth.already-have-an-account")} {t("auth.sign-in")} ); }