'use client'; import { NEXT_PUBLIC_DEFAULT_USER_EMAIL, NEXT_PUBLIC_DEFAULT_USER_PASSWORD, } from '@/config/constants'; import useGlobalStore from '@/config/use-global'; import { checkUser, resetPassword, userLogin, userRegister } from '@/services/common/auth'; import { getRedirectUrl, setAuthorization } from '@/utils/common'; import { useTranslations } from 'next-intl'; import { useRouter } from 'next/navigation'; import { ReactNode, useState, useTransition } from 'react'; import { toast } from 'sonner'; import UserCheckForm from './user-check-form'; import UserLoginForm from './user-login-form'; import UserRegisterForm from './user-register-form'; import UserResetForm from './user-reset-form'; export default function UserAuthForm() { const t = useTranslations('auth'); const { common } = useGlobalStore(); const { register } = common; const router = useRouter(); const [type, setType] = useState<'login' | 'register' | 'reset'>(); const [loading, startTransition] = useTransition(); const [initialValues, setInitialValues] = useState<{ email?: string; password?: string; }>({ email: NEXT_PUBLIC_DEFAULT_USER_EMAIL, password: NEXT_PUBLIC_DEFAULT_USER_PASSWORD, }); const handleFormSubmit = async (params: any) => { const onLogin = async (token?: string) => { if (!token) return; setAuthorization(token); router.replace(getRedirectUrl()); router.refresh(); }; startTransition(async () => { try { switch (type) { case 'login': // eslint-disable-next-line no-case-declarations const login = await userLogin(params); toast.success(t('login.success')); onLogin(login.data.data?.token); break; case 'register': // eslint-disable-next-line no-case-declarations const create = await userRegister(params); toast.success(t('register.success')); onLogin(create.data.data?.token); break; case 'reset': await resetPassword(params); toast.success(t('reset.success')); setType('login'); break; default: if (type === 'reset') break; // eslint-disable-next-line no-case-declarations const response = await checkUser(params); setInitialValues({ ...initialValues, ...params, }); setType(response.data.data?.exist ? 'login' : 'register'); break; } } catch (error) { /* empty */ } }); }; let UserForm: ReactNode = null; switch (type) { case 'login': UserForm = ( ); break; case 'register': UserForm = ( ); break; case 'reset': UserForm = ( ); break; default: UserForm = ( ); break; } return ( <>

{t(`${type || 'check'}.title`)}

{t(`${type || 'check'}.description`)}
{/* {!((type === 'register' && register.stop_register) || type === 'reset') && ( <>
{t('orWithEmail')}
)} */} {UserForm} ); }