import React from 'react'; import { defaultFormFieldOptions, censorAllButFirstAndLast, censorPhoneNumber, ContactMethod, translate, UnverifiedContactMethods, authenticatorTextUtil, } from '@aws-amplify/ui'; import { Flex } from '../../../primitives/Flex'; import { Heading } from '../../../primitives/Heading'; import { Radio } from '../../../primitives/Radio'; import { RadioGroupField } from '../../../primitives/RadioGroupField'; import { useAuthenticator } from '@aws-amplify/ui-react-core'; import { useCustomComponents } from '../hooks/useCustomComponents'; import { useFormHandlers } from '../hooks/useFormHandlers'; import { RemoteErrorMessage } from '../shared/RemoteErrorMessage'; import { TwoButtonSubmitFooter } from '../shared/TwoButtonSubmitFooter'; import { RouteContainer, RouteProps } from '../RouteContainer'; const { getSkipText, getVerifyText, getVerifyContactText, getAccountRecoveryInfoText, } = authenticatorTextUtil; const censorContactInformation = ( type: ContactMethod, value: string ): string => { const translated = translate(type); let newVal = value; if (type === 'Phone Number') { newVal = censorPhoneNumber(value); } else if (type === 'Email') { const splitEmail = value.split('@'); const censoredName = censorAllButFirstAndLast(splitEmail[0]); newVal = `${censoredName}@${splitEmail[1]}`; } return `${translated}: ${newVal}`; }; const generateRadioGroup = ( attributes: UnverifiedContactMethods ): JSX.Element[] => { return Object.entries(attributes).map(([key, value]: [string, string]) => ( {censorContactInformation( (defaultFormFieldOptions[key] as { label: ContactMethod }).label, value )} )); }; export const VerifyUser = ({ className, variation, }: RouteProps): JSX.Element => { const { components: { // @ts-ignore VerifyUser: { Header = VerifyUser.Header, Footer = VerifyUser.Footer }, }, } = useCustomComponents(); const { isPending, unverifiedContactMethods } = useAuthenticator( ({ isPending, unverifiedContactMethods }) => [ isPending, unverifiedContactMethods, ] ); const { handleChange, handleSubmit } = useFormHandlers(); const footerSubmitText = isPending ? ( <>Verifying… ) : ( <>{getVerifyText()} ); const verificationRadioGroup = ( {generateRadioGroup(unverifiedContactMethods)} ); return (
{verificationRadioGroup}