Skip to content

Commit f0b2d26

Browse files
authored
chore(ui-react): refactor Authenticator related FormField and FormFields components (#1828)
1 parent 9d3b0b0 commit f0b2d26

File tree

11 files changed

+51
-54
lines changed

11 files changed

+51
-54
lines changed

packages/react/src/components/Authenticator/ConfirmSignIn/ConfirmSignIn.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ export const ConfirmSignIn = ({
4545
<Header />
4646

4747
<Flex direction="column">
48-
<FormFields route="confirmSignIn" />
48+
<FormFields />
4949
<RemoteErrorMessage />
5050
</Flex>
5151

packages/react/src/components/Authenticator/ConfirmSignUp/ConfirmSignUp.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ export function ConfirmSignUp({ className, variation }: RouteProps) {
6969
{subtitleText}
7070
</Text>
7171

72-
<FormFields route="confirmSignUp" />
72+
<FormFields />
7373

7474
<RemoteErrorMessage />
7575

packages/react/src/components/Authenticator/ForceNewPassword/ForceNewPassword.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,4 +71,4 @@ export const ForceNewPassword = ({
7171
);
7272
};
7373

74-
ForceNewPassword.FormFields = () => <FormFields route="forceNewPassword" />;
74+
ForceNewPassword.FormFields = () => <FormFields />;

packages/react/src/components/Authenticator/ResetPassword/ConfirmResetPassword.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ export const ConfirmResetPassword = ({
4040
<Header />
4141

4242
<Flex direction="column">
43-
<FormFields route="confirmResetPassword" />
43+
<FormFields />
4444
</Flex>
4545

4646
<RemoteErrorMessage />

packages/react/src/components/Authenticator/ResetPassword/ResetPassword.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ export const ResetPassword = ({
3939
<Header />
4040

4141
<Flex direction="column">
42-
<FormFields route="resetPassword" />
42+
<FormFields />
4343
</Flex>
4444

4545
<RemoteErrorMessage />

packages/react/src/components/Authenticator/SetupTOTP/SetupTOTP.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ export const SetupTOTP = ({
120120
</svg>
121121
</Flex>
122122
</Flex>
123-
<FormFields route="setupTOTP" />
123+
<FormFields />
124124
<RemoteErrorMessage />
125125
</Flex>
126126

packages/react/src/components/Authenticator/SignIn/SignIn.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ export function SignIn() {
3838
<VisuallyHidden>
3939
<legend>{translate('Sign in')}</legend>
4040
</VisuallyHidden>
41-
<FormFields route="signIn" />
41+
<FormFields />
4242
</Flex>
4343

4444
<RemoteErrorMessage />

packages/react/src/components/Authenticator/SignUp/SignUp.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,5 +66,5 @@ export function SignUp() {
6666
}
6767

6868
SignUp.Header = (): JSX.Element => null;
69-
SignUp.FormFields = () => <FormFields route="signUp" />;
69+
SignUp.FormFields = () => <FormFields />;
7070
SignUp.Footer = (): JSX.Element => null;

packages/react/src/components/Authenticator/VerifyUser/ConfirmVerifyUser.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ export const ConfirmVerifyUser = ({
3939
<Header />
4040

4141
<Flex direction="column">
42-
<FormFields route="confirmVerifyUser" />
42+
<FormFields />
4343
</Flex>
4444

4545
<RemoteErrorMessage />

packages/react/src/components/Authenticator/shared/FormField.tsx

Lines changed: 25 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import * as React from 'react';
12
import { FormFieldOptions, getErrors } from '@aws-amplify/ui';
23

34
import { PasswordField } from '../../../primitives/PasswordField';
@@ -6,32 +7,38 @@ import { TextField } from '../../../primitives/TextField';
67
import { useAuthenticator } from '../hooks/useAuthenticator';
78
import { ValidationErrors } from './ValidationErrors';
89

9-
export interface FormFieldProps {
10+
export interface FormFieldProps extends Omit<FormFieldOptions, 'label'> {
11+
// label is a required prop for the UI field components used in FormField
12+
label: string;
1013
name: string;
11-
formFieldOptions: FormFieldOptions;
1214
}
13-
export function FormField({ name, formFieldOptions }: FormFieldProps) {
14-
const { validationErrors } = useAuthenticator((context) => [
15-
context.validationErrors,
15+
16+
export function FormField({
17+
autocomplete: autoComplete,
18+
dialCode,
19+
name,
20+
type,
21+
...props
22+
}: FormFieldProps) {
23+
const { validationErrors } = useAuthenticator(({ validationErrors }) => [
24+
validationErrors,
1625
]);
17-
const { type } = formFieldOptions;
1826

19-
const errors = getErrors(validationErrors[name]);
27+
const errors = React.useMemo(
28+
() => getErrors(validationErrors[name]),
29+
[name, validationErrors]
30+
);
2031
const hasError = errors?.length > 0;
2132

2233
if (type === 'tel') {
2334
return (
2435
<>
2536
<PhoneNumberField
37+
{...props}
2638
name={name}
27-
label={formFieldOptions.label}
28-
placeholder={formFieldOptions.placeholder}
29-
defaultCountryCode={formFieldOptions.dialCode}
39+
defaultCountryCode={dialCode}
3040
countryCodeName="country_code"
31-
dialCodeList={formFieldOptions.dialCodeList}
32-
autoComplete={formFieldOptions.autocomplete}
33-
isRequired={formFieldOptions.isRequired}
34-
labelHidden={formFieldOptions.labelHidden}
41+
autoComplete={autoComplete}
3542
hasError={hasError}
3643
/>
3744
<ValidationErrors errors={errors} />
@@ -41,12 +48,9 @@ export function FormField({ name, formFieldOptions }: FormFieldProps) {
4148
return (
4249
<>
4350
<PasswordField
51+
{...props}
4452
name={name}
45-
label={formFieldOptions.label}
46-
autoComplete={formFieldOptions.autocomplete}
47-
placeholder={formFieldOptions.placeholder}
48-
isRequired={formFieldOptions.isRequired}
49-
labelHidden={formFieldOptions.labelHidden}
53+
autoComplete={autoComplete}
5054
hasError={hasError}
5155
/>
5256
<ValidationErrors errors={errors} />
@@ -56,12 +60,9 @@ export function FormField({ name, formFieldOptions }: FormFieldProps) {
5660
return (
5761
<>
5862
<TextField
63+
{...props}
5964
name={name}
60-
label={formFieldOptions.label}
61-
placeholder={formFieldOptions.placeholder}
62-
autoComplete={formFieldOptions.autocomplete}
63-
isRequired={formFieldOptions.isRequired}
64-
labelHidden={formFieldOptions.labelHidden}
65+
autoComplete={autoComplete}
6566
hasError={hasError}
6667
type={type}
6768
/>

0 commit comments

Comments
 (0)