import { Box, Button, Paper, TextField, Typography } from '@mui/material'; import parsePhoneNumberFromString from 'libphonenumber-js'; import React, { useRef, useState, type Dispatch } from 'react'; import { useTranslation } from 'react-i18next'; import { CountryCodeSelector } from './CountryCodeSelector'; import { AuthenticationCard } from './AuthenticationCard'; export interface CompleteSignUpProps { email: string; value: string; setValue: Dispatch; onCompleteSignUp: (countryCode: string, value: string) => void; } export const CompleteSignUp = ({ email, value, setValue, onCompleteSignUp, }: CompleteSignUpProps) => { const { t } = useTranslation('authentication'); const [countryCode, setCountryCode] = useState('+98'); const [error, setError] = useState(); const textFieldRef = useRef(null); const inputRef = useRef(null); const [touched, setTouched] = useState(false); const inputError: boolean = touched && !!error; const isPhoneValid = (code: string, phone: string) => { const phoneNumber = parsePhoneNumberFromString(code + phone); return phoneNumber && phoneNumber.isValid(); }; const handleBlur = () => { setTouched(true); if (!value) { setError(t('loginForm.thisFieldIsRequired')); } if (!isPhoneValid(countryCode, value)) { setError(t('loginForm.phoneNumberIsInvalid')); } else { setError(undefined); } }; const handleCompleteSignUp = () => { if (!value) { setError(t('loginForm.thisFieldIsRequired')); inputRef.current?.focus(); } if (!isPhoneValid(countryCode, value)) { setError(t('loginForm.phoneNumberIsInvalid')); inputRef.current?.focus(); } else { setError(undefined); onCompleteSignUp(countryCode, value); } }; return ( {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, paddingX: 0 } }, input: { endAdornment: ( ), }, }} sx={{ my: 4 }} /> ); };