diff --git a/login-workflow/example/package.json b/login-workflow/example/package.json index 122c0d72..ad9784e6 100644 --- a/login-workflow/example/package.json +++ b/login-workflow/example/package.json @@ -43,11 +43,11 @@ "@okta/okta-auth-js": "^7.7.0", "@okta/okta-react": "^6.9.0", "@types/node": "^17.0.23", - "@types/react": "^18.3.3", + "@types/react": "18.2.39", "@types/react-dom": "^18.0.0", "date-fns": "^3.6.0", "i18next": "^23.7.13", - "react": "^18.3.1", + "react": "^18.2.0", "react-app-polyfill": "^3.0.0", "react-dom": "^18.0.0", "react-i18next": "^13.0.3", diff --git a/login-workflow/example/yarn.lock b/login-workflow/example/yarn.lock index 641aa161..7de8165f 100644 --- a/login-workflow/example/yarn.lock +++ b/login-workflow/example/yarn.lock @@ -2713,7 +2713,7 @@ dependencies: "@types/react" "*" -"@types/react@*", "@types/react@^18.3.3": +"@types/react@*": version "18.3.3" resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.3.tgz#9679020895318b0915d7a3ab004d92d33375c45f" integrity sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw== @@ -2721,6 +2721,15 @@ "@types/prop-types" "*" csstype "^3.0.2" +"@types/react@18.2.39": + version "18.2.39" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.39.tgz#744bee99e053ad61fe74eb8b897f3ab5b19a7e25" + integrity sha512-Oiw+ppED6IremMInLV4HXGbfbG6GyziY3kqAwJYOR0PNbkYDmLWQA3a95EhdSmamsvbkJN96ZNN+YD+fGjzSBA== + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "*" + csstype "^3.0.2" + "@types/resolve@1.17.1": version "1.17.1" resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" @@ -2733,6 +2742,11 @@ resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== +"@types/scheduler@*": + version "0.23.0" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.23.0.tgz#0a6655b3e2708eaabca00b7372fafd7a792a7b09" + integrity sha512-YIoDCTH3Af6XM5VuwGG/QL/CJqga1Zm3NkU3HZ4ZHK2fRMPYP1VczsTUqtsf43PH/iJNVlPHAo2oWX7BSdB2Hw== + "@types/semver@^7.3.12", "@types/semver@^7.3.13": version "7.5.0" resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.0.tgz#591c1ce3a702c45ee15f47a42ade72c2fd78978a" @@ -9073,7 +9087,7 @@ react-transition-group@^4.4.5: loose-envify "^1.4.0" prop-types "^15.6.2" -react@^18.3.1: +react@^18.2.0: version "18.3.1" resolved "https://registry.yarnpkg.com/react/-/react-18.3.1.tgz#49ab892009c53933625bd16b2533fc754cab2891" integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ== diff --git a/login-workflow/src/components/WorkflowCard/WorkflowCard.types.ts b/login-workflow/src/components/WorkflowCard/WorkflowCard.types.ts index 7c4dc57e..224884b6 100644 --- a/login-workflow/src/components/WorkflowCard/WorkflowCard.types.ts +++ b/login-workflow/src/components/WorkflowCard/WorkflowCard.types.ts @@ -123,4 +123,8 @@ export type WorkflowCardProps = { * Props for WorkflowCardActions component */ WorkflowCardActionsProps?: WorkflowCardActionsProps; + /** + * The system prop that allows defining system overrides as well as additional CSS styles. + */ + sx?: BoxProps['sx']; // or SxProps }; diff --git a/login-workflow/src/screens/AccountDetailsScreen/AccountDetailsScreen.tsx b/login-workflow/src/screens/AccountDetailsScreen/AccountDetailsScreen.tsx index 7b756813..e4ca0438 100644 --- a/login-workflow/src/screens/AccountDetailsScreen/AccountDetailsScreen.tsx +++ b/login-workflow/src/screens/AccountDetailsScreen/AccountDetailsScreen.tsx @@ -76,6 +76,7 @@ export const AccountDetailsScreen: React.FC = (props) lastNameTextFieldProps, initialFirstName = screenData.AccountDetails.firstName, initialLastName = screenData.AccountDetails.lastName, + ...otherProps } = props; const workflowCardHeaderProps = { @@ -134,6 +135,7 @@ export const AccountDetailsScreen: React.FC = (props) lastNameValidator={lastNameValidator} WorkflowCardActionsProps={workflowCardActionsProps} errorDisplayConfig={errorDisplayConfig} + {...otherProps} /> ); }; diff --git a/login-workflow/src/screens/AccountDetailsScreen/AccountDetailsScreenBase.tsx b/login-workflow/src/screens/AccountDetailsScreen/AccountDetailsScreenBase.tsx index ddc25b40..95abc2f7 100644 --- a/login-workflow/src/screens/AccountDetailsScreen/AccountDetailsScreenBase.tsx +++ b/login-workflow/src/screens/AccountDetailsScreen/AccountDetailsScreenBase.tsx @@ -30,6 +30,7 @@ export const AccountDetailsScreenBase: React.FC = (pr lastNameValidator = (): void => {}, lastNameTextFieldProps, errorDisplayConfig, + ...otherProps } = props; const cardBaseProps = props.WorkflowCardBaseProps || {}; @@ -87,7 +88,7 @@ export const AccountDetailsScreenBase: React.FC = (pr }, []); return ( - + diff --git a/login-workflow/src/screens/AccountDetailsScreen/types.ts b/login-workflow/src/screens/AccountDetailsScreen/types.ts index 9bc9fb39..7eccec3c 100644 --- a/login-workflow/src/screens/AccountDetailsScreen/types.ts +++ b/login-workflow/src/screens/AccountDetailsScreen/types.ts @@ -1,57 +1,56 @@ -import { BoxProps, TextFieldProps } from '@mui/material'; +import { TextFieldProps } from '@mui/material'; import { WorkflowCardProps } from '../../components/WorkflowCard/WorkflowCard.types'; import { ErrorManagerProps } from '../../components/Error/types'; -export type AccountDetailsScreenProps = WorkflowCardProps & - BoxProps & { - /** - * The label for the first name text field - */ - firstNameLabel?: string; - - /** - * The initial value for the first name text field - */ - initialFirstName?: string; - - /** - * The function that validates the first name text field - * @param {string} firstName - validates first name input length - * @returns boolean | string - */ - firstNameValidator?: (firstName: string) => boolean | string; - - /** - * The props to pass to the first name field. - * See [MUI's TextFieldProps API](https://mui.com/material-ui/api/text-field/) for more details. - */ - firstNameTextFieldProps?: TextFieldProps; - - /** - * The label for the last name text field - */ - lastNameLabel?: string; - - /** - * The initial value for the last name text field - */ - initialLastName?: string; - - /** - * The function that validates the last name text field - * @param {string} lastName - validates last name input length - * @returns boolean | string - */ - lastNameValidator?: (lastName: string) => boolean | string; - - /** - * The props to pass to the last name field. - * See [MUI's TextFieldProps API](https://mui.com/material-ui/api/text-field/) for more details. - */ - lastNameTextFieldProps?: TextFieldProps; - - /** - * The configuration for customizing how errors are displayed - */ - errorDisplayConfig?: ErrorManagerProps; - }; +export type AccountDetailsScreenProps = WorkflowCardProps & { + /** + * The label for the first name text field + */ + firstNameLabel?: string; + + /** + * The initial value for the first name text field + */ + initialFirstName?: string; + + /** + * The function that validates the first name text field + * @param {string} firstName - validates first name input length + * @returns boolean | string + */ + firstNameValidator?: (firstName: string) => boolean | string; + + /** + * The props to pass to the first name field. + * See [MUI's TextFieldProps API](https://mui.com/material-ui/api/text-field/) for more details. + */ + firstNameTextFieldProps?: TextFieldProps; + + /** + * The label for the last name text field + */ + lastNameLabel?: string; + + /** + * The initial value for the last name text field + */ + initialLastName?: string; + + /** + * The function that validates the last name text field + * @param {string} lastName - validates last name input length + * @returns boolean | string + */ + lastNameValidator?: (lastName: string) => boolean | string; + + /** + * The props to pass to the last name field. + * See [MUI's TextFieldProps API](https://mui.com/material-ui/api/text-field/) for more details. + */ + lastNameTextFieldProps?: TextFieldProps; + + /** + * The configuration for customizing how errors are displayed + */ + errorDisplayConfig?: ErrorManagerProps; +}; diff --git a/login-workflow/src/screens/ContactScreen/ContactSupportScreenBase.tsx b/login-workflow/src/screens/ContactScreen/ContactSupportScreenBase.tsx index 882d20ba..2a00d39c 100644 --- a/login-workflow/src/screens/ContactScreen/ContactSupportScreenBase.tsx +++ b/login-workflow/src/screens/ContactScreen/ContactSupportScreenBase.tsx @@ -51,6 +51,7 @@ export const ContactSupportScreenBase: React.FC = (pr contactPhone, dismissButtonLabel, onDismiss, + ...otherProps } = props; const defaultClasses = useUtilityClasses(props); @@ -61,7 +62,12 @@ export const ContactSupportScreenBase: React.FC = (pr const actionsProps = props.WorkflowCardActionsProps || {}; return ( - + {Object.keys(instructionsProps).length !== 0 && } {icon && ( diff --git a/login-workflow/src/screens/CreateAccountScreen/CreateAccountScreen.tsx b/login-workflow/src/screens/CreateAccountScreen/CreateAccountScreen.tsx index 18a62c1e..12a09e3f 100644 --- a/login-workflow/src/screens/CreateAccountScreen/CreateAccountScreen.tsx +++ b/login-workflow/src/screens/CreateAccountScreen/CreateAccountScreen.tsx @@ -70,6 +70,7 @@ export const CreateAccountScreen: React.FC = (props) = return true; }, emailTextFieldProps, + ...otherProps } = props; const workflowCardBaseProps = { @@ -123,6 +124,7 @@ export const CreateAccountScreen: React.FC = (props) = emailValidator={emailValidator} WorkflowCardActionsProps={workflowCardActionsProps} errorDisplayConfig={errorDisplayConfig} + {...otherProps} /> ); }; diff --git a/login-workflow/src/screens/CreateAccountScreen/CreateAccountScreenBase.tsx b/login-workflow/src/screens/CreateAccountScreen/CreateAccountScreenBase.tsx index 294c0176..5b8f6ab9 100644 --- a/login-workflow/src/screens/CreateAccountScreen/CreateAccountScreenBase.tsx +++ b/login-workflow/src/screens/CreateAccountScreen/CreateAccountScreenBase.tsx @@ -28,6 +28,7 @@ export const CreateAccountScreenBase: React.FC< emailTextFieldProps, inputRef, errorDisplayConfig, + ...otherProps } = props; const cardBaseProps = props.WorkflowCardBaseProps || {}; @@ -59,7 +60,7 @@ export const CreateAccountScreenBase: React.FC< }, []); return ( - + diff --git a/login-workflow/src/screens/CreatePasswordScreen/CreatePasswordScreen.tsx b/login-workflow/src/screens/CreatePasswordScreen/CreatePasswordScreen.tsx index fcefcc58..e02cb2e5 100644 --- a/login-workflow/src/screens/CreatePasswordScreen/CreatePasswordScreen.tsx +++ b/login-workflow/src/screens/CreatePasswordScreen/CreatePasswordScreen.tsx @@ -34,6 +34,7 @@ export const CreatePasswordScreen: React.FC = (props) WorkflowCardInstructionProps, WorkflowCardActionsProps, PasswordProps, + ...otherProps } = props; const passwordRef = useRef(null); @@ -162,6 +163,7 @@ export const CreatePasswordScreen: React.FC = (props) WorkflowCardInstructionProps={workflowCardInstructionProps} PasswordProps={passwordProps} errorDisplayConfig={errorDisplayConfig} + {...otherProps} /> ); }; diff --git a/login-workflow/src/screens/CreatePasswordScreen/CreatePasswordScreenBase.tsx b/login-workflow/src/screens/CreatePasswordScreen/CreatePasswordScreenBase.tsx index 58de4bb8..0fcc2958 100644 --- a/login-workflow/src/screens/CreatePasswordScreen/CreatePasswordScreenBase.tsx +++ b/login-workflow/src/screens/CreatePasswordScreen/CreatePasswordScreenBase.tsx @@ -24,10 +24,10 @@ export const CreatePasswordScreenBase: React.FC ({}) }; - const { errorDisplayConfig } = props; + const { errorDisplayConfig, ...otherProps } = props; return ( - + diff --git a/login-workflow/src/screens/EulaScreen/EulaScreenBase.tsx b/login-workflow/src/screens/EulaScreen/EulaScreenBase.tsx index 51b89f94..836f917f 100644 --- a/login-workflow/src/screens/EulaScreen/EulaScreenBase.tsx +++ b/login-workflow/src/screens/EulaScreen/EulaScreenBase.tsx @@ -34,6 +34,7 @@ export const EulaScreenBase: React.FC = (props) => { checkboxProps, errorDisplayConfig, refreshConfig, + ...otherProps } = props; const { t } = useTranslation(); @@ -58,7 +59,7 @@ export const EulaScreenBase: React.FC = (props) => { }; return ( - + {Object.keys(instructionsProps).length !== 0 && } diff --git a/login-workflow/src/screens/ForgotPasswordScreen/ForgotPasswordScreen.tsx b/login-workflow/src/screens/ForgotPasswordScreen/ForgotPasswordScreen.tsx index 142b3e6e..95c1d795 100644 --- a/login-workflow/src/screens/ForgotPasswordScreen/ForgotPasswordScreen.tsx +++ b/login-workflow/src/screens/ForgotPasswordScreen/ForgotPasswordScreen.tsx @@ -72,6 +72,7 @@ export const ForgotPasswordScreen: React.FC = (props) slots = {}, slotProps = {}, emailTextFieldProps, + ...otherProps } = props; const workflowCardBaseProps = { @@ -174,6 +175,7 @@ export const ForgotPasswordScreen: React.FC = (props) }, }} errorDisplayConfig={errorDisplayConfig} + {...otherProps} /> ); }; diff --git a/login-workflow/src/screens/ForgotPasswordScreen/ForgotPasswordScreenBase.tsx b/login-workflow/src/screens/ForgotPasswordScreen/ForgotPasswordScreenBase.tsx index 6d193e06..9f66d06b 100644 --- a/login-workflow/src/screens/ForgotPasswordScreen/ForgotPasswordScreenBase.tsx +++ b/login-workflow/src/screens/ForgotPasswordScreen/ForgotPasswordScreenBase.tsx @@ -32,6 +32,7 @@ export const ForgotPasswordScreenBase: React.FC + diff --git a/login-workflow/src/screens/LoginScreen/LoginScreen.tsx b/login-workflow/src/screens/LoginScreen/LoginScreen.tsx index 16dd1e63..e469a507 100644 --- a/login-workflow/src/screens/LoginScreen/LoginScreen.tsx +++ b/login-workflow/src/screens/LoginScreen/LoginScreen.tsx @@ -74,6 +74,7 @@ export const LoginScreen: React.FC> = projectImage, header, footer, + ...otherProps } = props; return ( @@ -119,6 +120,7 @@ export const LoginScreen: React.FC> = projectImage={projectImage} header={header} footer={footer} + {...otherProps} /> ); }; diff --git a/login-workflow/src/screens/OktaLoginScreen/OktaLoginScreen.test.tsx b/login-workflow/src/screens/OktaLoginScreen/OktaLoginScreen.test.tsx index 2aa0de9d..627df63d 100644 --- a/login-workflow/src/screens/OktaLoginScreen/OktaLoginScreen.test.tsx +++ b/login-workflow/src/screens/OktaLoginScreen/OktaLoginScreen.test.tsx @@ -17,7 +17,6 @@ describe('OktaLoginScreen', () => { const mockSignInWithRedirect = jest.fn(); const mockTriggerError = jest.fn(); const mockNavigate = jest.fn(); - const mockOnLogin = jest.fn(); beforeEach(() => { (useOktaAuth as jest.Mock).mockReturnValue({ @@ -51,18 +50,6 @@ describe('OktaLoginScreen', () => { expect(screen.getByRole('button', { name: 'bluiCommon:ACTIONS.OKTA_LOG_IN' })).toBeInTheDocument(); }); - it('handles login correctly', async () => { - renderer({ onLogin: mockOnLogin }); - const loginButton = screen.getByRole('button', { name: 'bluiCommon:ACTIONS.OKTA_LOG_IN' }); - - act(() => { - fireEvent.click(loginButton); - }); - - await waitFor(() => expect(mockSignInWithRedirect).toHaveBeenCalled()); - await waitFor(() => expect(mockOnLogin).toHaveBeenCalled()); - }); - it('handles login error correctly', async () => { mockSignInWithRedirect.mockRejectedValueOnce(new Error('Login error')); renderer(); diff --git a/login-workflow/src/screens/OktaLoginScreen/OktaLoginScreen.tsx b/login-workflow/src/screens/OktaLoginScreen/OktaLoginScreen.tsx index a4021dbc..80a9bb0f 100644 --- a/login-workflow/src/screens/OktaLoginScreen/OktaLoginScreen.tsx +++ b/login-workflow/src/screens/OktaLoginScreen/OktaLoginScreen.tsx @@ -45,6 +45,7 @@ export const OktaLoginScreen: React.FC = (props) => { projectImage, header, footer, + ...otherProps } = props; useEffect(() => { @@ -83,6 +84,7 @@ export const OktaLoginScreen: React.FC = (props) => { projectImage={projectImage} header={header} footer={footer} + {...otherProps} /> ); }; diff --git a/login-workflow/src/screens/ResetPasswordScreen/ResetPasswordScreen.test.tsx b/login-workflow/src/screens/ResetPasswordScreen/ResetPasswordScreen.test.tsx index 8e9f0c43..a7d07e3e 100644 --- a/login-workflow/src/screens/ResetPasswordScreen/ResetPasswordScreen.test.tsx +++ b/login-workflow/src/screens/ResetPasswordScreen/ResetPasswordScreen.test.tsx @@ -43,8 +43,7 @@ describe('Reset Password Screen', () => { }); it('should show success screen, when okay button is clicked', async () => { - const { getByLabelText } = renderer({ - showSuccessScreen: true, + const { getByLabelText, getByTestId } = renderer({ PasswordProps: { newPasswordLabel: 'New Password', confirmPasswordLabel: 'Confirm New Password', @@ -63,6 +62,32 @@ describe('Reset Password Screen', () => { fireEvent.change(confirmPasswordInput, { target: { value: 'Abc@1234' } }); fireEvent.click(screen.getByText('Next')); await waitFor(() => expect(screen.getByText('Your password was successfully reset.'))); + const doneButton = getByTestId('BluiWorkflowCardActions-nextButton'); + fireEvent.click(doneButton); + }); + + it('should call handleNext callback function', () => { + const { getByLabelText } = renderer({ + showSuccessScreen: false, + PasswordProps: { + newPasswordLabel: 'New Password', + confirmPasswordLabel: 'Confirm New Password', + onPasswordChange: jest.fn(), + passwordRequirements: [], + }, + WorkflowCardActionsProps: { + canGoNext: true, + nextLabel: 'Next', + onNext: mockOnNext(), + }, + }); + + const newPasswordInput = getByLabelText('New Password'); + const confirmPasswordInput = getByLabelText('Confirm New Password'); + fireEvent.change(newPasswordInput, { target: { value: 'Abc@1234' } }); + fireEvent.change(confirmPasswordInput, { target: { value: 'Abc@1234' } }); + fireEvent.click(screen.getByText('Next')); + expect(mockOnNext).toHaveBeenCalled(); }); it('should show loader, when loading prop is passed to WorkflowCardBaseProps', async () => { diff --git a/login-workflow/src/screens/ResetPasswordScreen/ResetPasswordScreen.tsx b/login-workflow/src/screens/ResetPasswordScreen/ResetPasswordScreen.tsx index 1bf2df8d..fcad06c6 100644 --- a/login-workflow/src/screens/ResetPasswordScreen/ResetPasswordScreen.tsx +++ b/login-workflow/src/screens/ResetPasswordScreen/ResetPasswordScreen.tsx @@ -40,6 +40,7 @@ export const ResetPasswordScreen: React.FC = (props) = PasswordProps, slots = {}, slotProps = {}, + ...otherProps } = props; const [passwordInput, setPasswordInput] = useState(PasswordProps?.initialNewPasswordValue ?? ''); @@ -199,6 +200,7 @@ export const ResetPasswordScreen: React.FC = (props) = } : errorDisplayConfig.onClose, }} + {...otherProps} /> ); }; diff --git a/login-workflow/src/screens/ResetPasswordScreen/ResetPasswordScreenBase.tsx b/login-workflow/src/screens/ResetPasswordScreen/ResetPasswordScreenBase.tsx index 2c78201a..f47dcf07 100644 --- a/login-workflow/src/screens/ResetPasswordScreen/ResetPasswordScreenBase.tsx +++ b/login-workflow/src/screens/ResetPasswordScreen/ResetPasswordScreenBase.tsx @@ -27,7 +27,7 @@ export const ResetPasswordScreenBase: React.FC ({}) }; - const { showSuccessScreen, slots, slotProps = {}, errorDisplayConfig } = props; + const { showSuccessScreen, slots, slotProps = {}, errorDisplayConfig, ...otherProps } = props; const getSuccessScreen = ( _props?: SuccessScreenProps, @@ -39,7 +39,7 @@ export const ResetPasswordScreenBase: React.FC + diff --git a/login-workflow/src/screens/SuccessScreen/SuccessScreenBase.tsx b/login-workflow/src/screens/SuccessScreen/SuccessScreenBase.tsx index b06b7a2d..22df11b4 100644 --- a/login-workflow/src/screens/SuccessScreen/SuccessScreenBase.tsx +++ b/login-workflow/src/screens/SuccessScreen/SuccessScreenBase.tsx @@ -19,7 +19,7 @@ import Box from '@mui/material/Box'; */ export const SuccessScreenBase: React.FC = (props) => { - const { EmptyStateProps, dismissButtonLabel = '', canDismiss, onDismiss } = props; + const { EmptyStateProps, dismissButtonLabel = '', canDismiss, onDismiss, ...otherProps } = props; const cardBaseProps = props.WorkflowCardBaseProps || {}; const headerProps = props.WorkflowCardHeaderProps || {}; @@ -27,7 +27,7 @@ export const SuccessScreenBase: React.FC = (props) => { const actionsProps = props.WorkflowCardActionsProps || {}; return ( - + {Object.keys(instructionsProps).length !== 0 && } diff --git a/login-workflow/src/screens/VerifyCodeScreen/VerifyCodeScreen.tsx b/login-workflow/src/screens/VerifyCodeScreen/VerifyCodeScreen.tsx index e7bd6451..36f8133a 100644 --- a/login-workflow/src/screens/VerifyCodeScreen/VerifyCodeScreen.tsx +++ b/login-workflow/src/screens/VerifyCodeScreen/VerifyCodeScreen.tsx @@ -55,6 +55,7 @@ export const VerifyCodeScreen: React.FC = (props) => { verifyCodeInputLabel = t('bluiRegistration:SELF_REGISTRATION.VERIFY_EMAIL.VERIFICATION'), initialValue = screenData.VerifyCode.code, verifyCodeTextFieldProps, + ...otherProps } = props; const handleOnNext = useCallback( @@ -153,6 +154,7 @@ export const VerifyCodeScreen: React.FC = (props) => { codeValidator={codeValidator} errorDisplayConfig={errorDisplayConfig} verifyCodeTextFieldProps={verifyCodeTextFieldProps} + {...otherProps} /> ); }; diff --git a/login-workflow/src/screens/VerifyCodeScreen/VerifyCodeScreenBase.tsx b/login-workflow/src/screens/VerifyCodeScreen/VerifyCodeScreenBase.tsx index 5f0740ea..d04a1301 100644 --- a/login-workflow/src/screens/VerifyCodeScreen/VerifyCodeScreenBase.tsx +++ b/login-workflow/src/screens/VerifyCodeScreen/VerifyCodeScreenBase.tsx @@ -29,6 +29,7 @@ export const VerifyCodeScreenBase: React.FC +