import { ChangeEvent, useMemo } from "react"; import { useMutation } from "react-query"; import { useRegisterStore } from "../stores/useRegisterStore"; import { RegisterProps } from "~/types/auth"; import { registerUser } from "~/services/auth"; import TermCondition from "./TermCondition"; import FormCaptcha from "./FormCaptcha"; import { useRouter } from "next/router"; import { UseToastOptions, useToast } from "@chakra-ui/react"; import Link from "next/link"; const Form = () => { const { form, isCheckedTNC, isValidCaptcha, errors, updateForm, validate, } = useRegisterStore() const isFormValid = useMemo(() => Object.keys(errors).length === 0, [errors]) const router = useRouter() const toast = useToast() const handleInputChange = (event: ChangeEvent) => { const { name, value } = event.target; updateForm(name, value) validate() } const mutation = useMutation({ mutationFn: (data: RegisterProps) => registerUser(data) }) const handleSubmit = async (e: ChangeEvent) => { e.preventDefault() const response = await mutation.mutateAsync(form) if (response?.register === true) { const urlParams = new URLSearchParams({ activation: 'otp', email: form.email, redirect: (router.query?.next || '/') as string }) router.push(`${router.route}?${urlParams}`) } const toastProps: UseToastOptions = { duration: 5000, isClosable: true } switch (response?.reason) { case 'EMAIL_USED': toast({ ...toastProps, title: 'Email sudah digunakan', status: 'warning' }) break; case 'NOT_ACTIVE': const activationUrl = `${router.route}?activation=email` toast({ ...toastProps, title: 'Akun belum aktif', description: <>Akun sudah terdaftar namun belum aktif. Klik untuk aktivasi akun, status: 'warning' }) break } } return (
{!!errors.name && {errors.name}}
{!!errors.phone && {errors.phone}}
{!!errors.email && {errors.email}}
{!!errors.password && {errors.password}}
) } export default Form