import { useState, type JSX } from 'react'; import { LoginRegisterForm } from './LoginRegiserForm'; import type { AuthMode, AuthStep, AuthType } from '../../types/authTypes'; import { OtpVerifyForm } from './OtpVerifyForm'; import { isNumeric } from '@/utils/regexes/isNumeric'; import { CompleteSignUp } from './CompleteSignUp'; import { EnterPasswordForm } from './EnterPasswordForm'; import { UserStatus } from '../../types/userTypes'; import type { CountryCode } from '@/types/commonTypes'; import { VerifyPhoneNumber } from './VerifyPhoneNumber'; import { useNavigate, useSearchParams } from 'react-router-dom'; export const AuthenticationSteps = (): JSX.Element => { const navigate = useNavigate(); const [searchParams] = useSearchParams(); const authReturnUrl: string | null = searchParams.get('returnUrl'); const authReturnUrlOrDefault: string = authReturnUrl ?? import.meta.env.VITE_DEFUALT_AUTH_RETURN_URL; const [authMode, setAuthMode] = useState('register'); const [authType, setAuthType] = useState('phone'); const [currentStep, setCurrentStep] = useState('emailOrPhone'); const [loginRegisterValue, setLoginRegisterValue] = useState(''); const [countryCode, setCountryCode] = useState('+98'); const [addPhoneCountryCode, setAddPhoneCountryCode] = useState('+98'); const [addedPhoneNumberValue, setAddedPhoneNumberValue] = useState(''); const handleLoginRegister = (value: string, userStatus: UserStatus) => { setAuthType(isNumeric(value) ? 'phone' : 'email'); switch (userStatus) { case UserStatus.NotRegistered: setAuthMode('register'); setCurrentStep('verify'); break; case UserStatus.RegisteredWithoutPassword: setAuthMode('login'); setCurrentStep('verify'); break; case UserStatus.RegisteredWithPassword: setAuthMode('login'); setCurrentStep('enterPassword'); break; } }; const handleUserLoggedIn = () => { redirectToReturnUrl(); }; const handleConfrimPhoneNumber = () => { setCurrentStep('addPhoneNumber'); }; const handlePhoneNumberVerified = () => { if (authReturnUrl) { navigate(`/signup?returnUrl=${authReturnUrl}`); } else { navigate(`/signup`); } }; const redirectToReturnUrl = () => { if (!authReturnUrl) { navigate(import.meta.env.VITE_DEFUALT_AUTH_RETURN_URL); } else { if (authMode === 'register') { navigate(`/account-created?returnUrl=${authReturnUrl}`); } else { location.href = authReturnUrl; } } }; return ( <> {currentStep === 'emailOrPhone' && ( )} {currentStep === 'verify' && ( setCurrentStep('emailOrPhone')} authMode={authMode} authType={authType} value={loginRegisterValue} /> )} {currentStep === 'enterPassword' && ( setCurrentStep('emailOrPhone')} onLoginWithOTP={() => setCurrentStep('verify')} emailOrPhone={loginRegisterValue} /> )} {currentStep === 'addPhoneNumber' && ( setCurrentStep('addedPhoneNumberVerify')} /> )} {currentStep === 'addedPhoneNumberVerify' && ( setCurrentStep('addPhoneNumber')} value={addedPhoneNumberValue} onPhoneNumberVerified={handlePhoneNumberVerified} /> )} ); };