import dynamic from 'next/dynamic'; import Link from 'next/link'; import Image from 'next/image'; import { useMemo, useState } from 'react'; import { useRouter } from 'next/router'; import { Button } from '@chakra-ui/react'; import { UseToastOptions, useToast } from '@chakra-ui/react'; import { useMutation } from 'react-query'; import { useRegisterStore } from './stores/useRegisterStore'; import { registerUser } from '~/services/auth'; import IndoteknikLogo from '~/images/logo.png'; import { RegisterProps } from '~/types/auth'; const PageContent = dynamic(() => import('~/modules/page-content')); const RegistrasiIndividu = dynamic( () => import('./components/RegistrasiIndividu') ); const RegistrasiBisnis = dynamic(() => import('./components/RegistrasiBisnis')); const FormCaptcha = dynamic(() => import('./components/FormCaptcha')); const TermCondition = dynamic(() => import('./components/TermCondition')); const AccountActivation = dynamic(() => import('../account-activation')); const LOGO_WIDTH = 150; const LOGO_HEIGHT = LOGO_WIDTH / 3; const Register = () => { const [isIndividuClicked, setIsIndividuClicked] = useState(true); const [notValid, setNotValid] = useState(false); const [buttonSubmitClick, setButtonSubmitClick] = useState(false); const [isBisnisClicked, setIsBisnisClicked] = useState(false); const { form, isCheckedTNC, isValidCaptcha, resetForm, errors, updateForm } = useRegisterStore(); const isFormValid = useMemo(() => Object.keys(errors).length === 0, [errors]); const toast = useToast(); const router = useRouter(); const mutation = useMutation({ mutationFn: (data: RegisterProps) => registerUser(data), }); const handleIndividuClick = () => { resetForm(); setIsIndividuClicked(true); setIsBisnisClicked(false); }; const handleBisnisClick = () => { resetForm(); updateForm('is_terdaftar', 'false'); updateForm('type_acc', 'business'); setIsIndividuClicked(false); setIsBisnisClicked(true); }; const handleSubmit = async () => { if (!isFormValid) { setNotValid(true); setButtonSubmitClick(!buttonSubmitClick); return; } else { setButtonSubmitClick(!buttonSubmitClick); setNotValid(false); } 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, position: 'top', }; 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; case 'BISNIS_NOT_FOUND': toast({ ...toastProps, title: 'Bisnis tidak ditemukan', status: 'warning', }); break; } }; return (
Individu
Bisnis