import React, { useMemo } from 'react'; import { authenticatorTextUtil } from '@aws-amplify/ui'; import { DefaultFooter, DefaultTextFormFields, DefaultHeader, DefaultContent, FederatedProviderButtons, } from '../../common'; import { useFieldValues } from '../../hooks'; import type { DefaultSignInProps } from '../types'; const COMPONENT_NAME = 'SignIn'; const SignIn = ({ fields, handleBlur, handleChange, handleSubmit, hideSignUp, socialProviders, toFederatedSignIn, toForgotPassword, toSignUp, validationErrors, ...rest }: DefaultSignInProps): React.JSX.Element => { const { getSignInTabText, getSignInText, getSignUpTabText, getForgotPasswordText, } = authenticatorTextUtil; const { disableFormSubmit: disabled, fields: fieldsWithHandlers, fieldValidationErrors, handleFormSubmit, } = useFieldValues({ componentName: COMPONENT_NAME, fields, handleBlur, handleChange, handleSubmit, validationErrors, }); const headerText = getSignInTabText(); const forgotPasswordText = getForgotPasswordText(true); const signInText = getSignInText(); const signUpText = getSignUpTabText(); const body = socialProviders ? ( ) : null; const buttons = useMemo(() => { const forgotPassword = { children: forgotPasswordText, onPress: toForgotPassword, }; return { primary: { children: signInText, disabled, onPress: handleFormSubmit }, links: hideSignUp ? [forgotPassword] : [forgotPassword, { children: signUpText, onPress: toSignUp }], }; }, [ disabled, forgotPasswordText, handleFormSubmit, hideSignUp, signInText, signUpText, toForgotPassword, toSignUp, ]); return ( ); }; SignIn.Footer = DefaultFooter; SignIn.FormFields = DefaultTextFormFields; SignIn.Header = DefaultHeader; SignIn.displayName = COMPONENT_NAME; export default SignIn;