import { Box, Button, TextField, Typography } from '@mui/material'; import parsePhoneNumberFromString from 'libphonenumber-js'; import { useRef, useState, type Dispatch } from 'react'; import { useTranslation } from 'react-i18next'; import { AuthenticationCard } from '../AuthenticationCard'; import { CountryCodeSelector } from '../../../../components/CountryCodeSelector'; import { sendSmsOtp } from '../../api/authorizationAPI'; import type { CountryCode } from '@/types/commonTypes'; import { useApi } from '@/hooks/useApi'; export interface CompleteSignUpProps { email: string; value: string; setValue: Dispatch; countryCode: CountryCode; setCountryCode: Dispatch; onCompleteSignUp: (countryCode: string, value: string) => void; } export const CompleteSignUp = ({ email, value, setValue, countryCode, setCountryCode, onCompleteSignUp, }: CompleteSignUpProps) => { const { t } = useTranslation('authentication'); const [error, setError] = useState(); const textFieldRef = useRef(null); const inputRef = useRef(null); const [touched, setTouched] = useState(false); const inputError: boolean = touched && !!error; const { loading: sendSmsLoading, execute: sendSmsCall } = useApi(sendSmsOtp); const isPhoneValid = (code: string, phone: string) => { const phoneNumber = parsePhoneNumberFromString(code + phone); return phoneNumber && phoneNumber.isValid(); }; const handleBlur = () => { setTouched(true); handleValueError(); }; const handleValueError = () => { if (!value) { setError(t('loginForm.thisFieldIsRequired')); } if (!isPhoneValid(countryCode, value)) { setError(t('loginForm.phoneNumberIsInvalid')); } else { setError(undefined); } }; const handleCompleteSignUp = async () => { handleValueError(); if (!value || !isPhoneValid(countryCode, value)) { inputRef.current?.focus(); } else { await sendSmsCall({ phoneNumber: countryCode + value }); onCompleteSignUp(countryCode, value); } }; return ( { e.preventDefault(); e.stopPropagation(); if (!sendSmsLoading) void handleCompleteSignUp(); }} > {t('completeSignUp.completeSignUp')} {t( 'completeSignUp.emailHasBeenSuccessfullyVerifiedPleaseEnterYourContactNumberToContinue', { email }, )} setValue(e.target.value)} onBlur={handleBlur} error={inputError} helperText={inputError ? error : ''} autoFocus slotProps={{ htmlInput: { dir: 'auto', sx: { lineHeight: 1.5 } }, input: { endAdornment: ( ), }, }} sx={{ my: 4 }} /> ); };