diff --git a/packages/ui/src/pages/PasswordRegisterWithUsername/index.test.tsx b/packages/ui/src/pages/RegisterPassword/index.test.tsx
similarity index 92%
rename from packages/ui/src/pages/PasswordRegisterWithUsername/index.test.tsx
rename to packages/ui/src/pages/RegisterPassword/index.test.tsx
index dbb1c6dde..84abdcb58 100644
--- a/packages/ui/src/pages/PasswordRegisterWithUsername/index.test.tsx
+++ b/packages/ui/src/pages/RegisterPassword/index.test.tsx
@@ -7,7 +7,7 @@ import SettingsProvider from '@/__mocks__/RenderWithPageContext/SettingsProvider
import { mockSignInExperienceSettings } from '@/__mocks__/logto';
import { setUserPassword } from '@/apis/interaction';
-import PasswordRegisterWithUsername from '.';
+import RegisterPassword from '.';
const mockedNavigate = jest.fn();
@@ -23,7 +23,7 @@ jest.mock('@/apis/interaction', () => ({
const useLocationMock = useLocation as jest.Mock;
-describe('
', () => {
+describe('
', () => {
afterEach(() => {
jest.clearAllMocks();
useLocationMock.mockImplementation(() => ({ state: { username: 'username' } }));
@@ -32,7 +32,7 @@ describe('
', () => {
it('render PasswordRegister page properly', () => {
const { queryByText, container } = renderWithPageContext(
-
+
);
@@ -52,7 +52,7 @@ describe('
', () => {
},
}}
>
-
+
);
@@ -63,7 +63,7 @@ describe('
', () => {
it('submit properly', async () => {
const { getByText, container } = renderWithPageContext(
-
+
);
diff --git a/packages/ui/src/pages/PasswordRegisterWithUsername/index.tsx b/packages/ui/src/pages/RegisterPassword/index.tsx
similarity index 89%
rename from packages/ui/src/pages/PasswordRegisterWithUsername/index.tsx
rename to packages/ui/src/pages/RegisterPassword/index.tsx
index 836da05a5..7cb99693e 100644
--- a/packages/ui/src/pages/PasswordRegisterWithUsername/index.tsx
+++ b/packages/ui/src/pages/RegisterPassword/index.tsx
@@ -7,7 +7,7 @@ import { useSieMethods } from '@/hooks/use-sie';
import ErrorPage from '../ErrorPage';
import useUsernamePasswordRegister from './use-username-password-register';
-const PasswordRegisterWithUsername = () => {
+const RegisterPassword = () => {
const { signUpMethods } = useSieMethods();
const setPassword = useUsernamePasswordRegister();
@@ -27,4 +27,4 @@ const PasswordRegisterWithUsername = () => {
);
};
-export default PasswordRegisterWithUsername;
+export default RegisterPassword;
diff --git a/packages/ui/src/pages/PasswordRegisterWithUsername/use-username-password-register.ts b/packages/ui/src/pages/RegisterPassword/use-username-password-register.ts
similarity index 95%
rename from packages/ui/src/pages/PasswordRegisterWithUsername/use-username-password-register.ts
rename to packages/ui/src/pages/RegisterPassword/use-username-password-register.ts
index 045d8c1e7..0de870f58 100644
--- a/packages/ui/src/pages/PasswordRegisterWithUsername/use-username-password-register.ts
+++ b/packages/ui/src/pages/RegisterPassword/use-username-password-register.ts
@@ -16,6 +16,7 @@ const useUsernamePasswordRegister = () => {
const errorHandlers: ErrorHandlers = useMemo(
() => ({
+ // Incase previous page submitted username has been taken
'user.username_already_in_use': async (error) => {
await show({ type: 'alert', ModalContent: error.message, cancelText: 'action.got_it' });
navigate(-1);
diff --git a/packages/ui/src/pages/SecondaryRegister/index.test.tsx b/packages/ui/src/pages/SecondaryRegister/index.test.tsx
deleted file mode 100644
index b1c5cb19d..000000000
--- a/packages/ui/src/pages/SecondaryRegister/index.test.tsx
+++ /dev/null
@@ -1,157 +0,0 @@
-import { SignInIdentifier, SignInMode } from '@logto/schemas';
-import { Routes, Route, MemoryRouter } from 'react-router-dom';
-
-import renderWithPageContext from '@/__mocks__/RenderWithPageContext';
-import SettingsProvider from '@/__mocks__/RenderWithPageContext/SettingsProvider';
-import { mockSignInExperienceSettings } from '@/__mocks__/logto';
-import SecondaryRegister from '@/pages/SecondaryRegister';
-
-jest.mock('i18next', () => ({
- language: 'en',
-}));
-
-describe('
', () => {
- test('renders phone', async () => {
- const { queryAllByText, container } = renderWithPageContext(
-
-
-
-
-
- }
- />
-
-
- );
- expect(queryAllByText('action.create_account')).toHaveLength(2);
- expect(container.querySelector('input[name="phone"]')).not.toBeNull();
- });
-
- test('renders email', async () => {
- const { queryAllByText, container } = renderWithPageContext(
-
-
-
-
-
- }
- />
-
-
- );
- expect(queryAllByText('action.create_account')).toHaveLength(2);
- expect(container.querySelector('input[name="email"]')).not.toBeNull();
- });
-
- test('renders non-recognized method should return error page', async () => {
- const { queryByText } = renderWithPageContext(
-
-
-
-
-
- }
- />
-
-
- );
- expect(queryByText('action.create_account')).toBeNull();
- expect(queryByText('description.not_found')).not.toBeNull();
- });
-
- test('renders non-supported signUp methods should return error page', () => {
- const { queryByText } = renderWithPageContext(
-
-
-
-
-
- }
- />
-
-
- );
- expect(queryByText('action.create_account')).toBeNull();
- expect(queryByText('description.not_found')).not.toBeNull();
- });
-
- test('render non-verified passwordless methods should return error page', () => {
- const { queryByText } = renderWithPageContext(
-
-
-
-
-
- }
- />
-
-
- );
- expect(queryByText('action.create_account')).toBeNull();
- expect(queryByText('description.not_found')).not.toBeNull();
- });
-
- test('render with sign-in only mode', () => {
- const { queryByText } = renderWithPageContext(
-
-
-
-
-
- }
- />
-
-
- );
- expect(queryByText('action.create_account')).toBeNull();
- expect(queryByText('description.not_found')).not.toBeNull();
- });
-});
diff --git a/packages/ui/src/pages/SecondaryRegister/index.tsx b/packages/ui/src/pages/SecondaryRegister/index.tsx
deleted file mode 100644
index f83e92a0c..000000000
--- a/packages/ui/src/pages/SecondaryRegister/index.tsx
+++ /dev/null
@@ -1,48 +0,0 @@
-import { SignInMode, SignInIdentifier } from '@logto/schemas';
-import { useParams } from 'react-router-dom';
-import { is } from 'superstruct';
-
-import SecondaryPageWrapper from '@/components/SecondaryPageWrapper';
-import CreateAccount from '@/containers/CreateAccount';
-import { EmailRegister } from '@/containers/EmailForm';
-import { PhoneRegister } from '@/containers/PhoneForm';
-import { useSieMethods } from '@/hooks/use-sie';
-import ErrorPage from '@/pages/ErrorPage';
-import { SignInMethodGuard, verificationCodeMethodGuard } from '@/types/guard';
-
-type Parameters = {
- method?: string;
-};
-
-const SecondaryRegister = () => {
- const { method = '' } = useParams
();
- const { signUpMethods, signUpSettings, signInMode } = useSieMethods();
-
- if (!signInMode || signInMode === SignInMode.SignIn) {
- return ;
- }
-
- // Validate the signUp method
- if (!is(method, SignInMethodGuard) || !signUpMethods.includes(method)) {
- return ;
- }
-
- // Validate the verify settings
- if (is(method, verificationCodeMethodGuard) && !signUpSettings.verify) {
- return ;
- }
-
- return (
-
- {method === SignInIdentifier.Phone ? (
-
- ) : method === SignInIdentifier.Email ? (
-
- ) : (
-
- )}
-
- );
-};
-
-export default SecondaryRegister;
diff --git a/packages/ui/src/pages/SignIn/IdentifierSignInForm/index.tsx b/packages/ui/src/pages/SignIn/IdentifierSignInForm/index.tsx
index b0195d816..c697d2e91 100644
--- a/packages/ui/src/pages/SignIn/IdentifierSignInForm/index.tsx
+++ b/packages/ui/src/pages/SignIn/IdentifierSignInForm/index.tsx
@@ -3,7 +3,6 @@ import type { SignIn } from '@logto/schemas';
import classNames from 'classnames';
import { useState, useCallback, useMemo } from 'react';
import { useForm } from 'react-hook-form';
-import { useTranslation } from 'react-i18next';
import Button from '@/components/Button';
import ErrorMessage from '@/components/ErrorMessage';
@@ -28,7 +27,6 @@ type FormState = {
};
const IdentifierSignInForm = ({ className, autoFocus, signInMethods }: Props) => {
- const { t } = useTranslation();
const { termsValidation } = useTerms();
const { errorMessage, clearErrorMessage, onSubmit } = useOnSubmit(signInMethods);
@@ -53,11 +51,11 @@ const IdentifierSignInForm = ({ className, autoFocus, signInMethods }: Props) =>
const onSubmitHandler = useCallback(
async (event?: React.FormEvent) => {
+ clearErrorMessage();
+
void handleSubmit(async ({ identifier }, event) => {
event?.preventDefault();
- clearErrorMessage();
-
if (!(await termsValidation())) {
return;
}
@@ -71,7 +69,7 @@ const IdentifierSignInForm = ({ className, autoFocus, signInMethods }: Props) =>
return (