diff --git a/packages/twenty-front/src/hooks/__tests__/usePageChangeEffectNavigateLocation.test.ts b/packages/twenty-front/src/hooks/__tests__/usePageChangeEffectNavigateLocation.test.ts index c95ac1c08..29c4973e9 100644 --- a/packages/twenty-front/src/hooks/__tests__/usePageChangeEffectNavigateLocation.test.ts +++ b/packages/twenty-front/src/hooks/__tests__/usePageChangeEffectNavigateLocation.test.ts @@ -98,7 +98,7 @@ const testCases: { { loc: AppPath.Invite, isLoggedIn: true, isWorkspaceSuspended: false, onboardingStatus: OnboardingStatus.PROFILE_CREATION, res: '/create/profile' }, { loc: AppPath.Invite, isLoggedIn: true, isWorkspaceSuspended: false, onboardingStatus: OnboardingStatus.SYNC_EMAIL, res: '/sync/emails' }, { loc: AppPath.Invite, isLoggedIn: true, isWorkspaceSuspended: false, onboardingStatus: OnboardingStatus.INVITE_TEAM, res: '/invite-team' }, - { loc: AppPath.Invite, isLoggedIn: true, isWorkspaceSuspended: false, onboardingStatus: OnboardingStatus.COMPLETED, res: '/objects/companies' }, + { loc: AppPath.Invite, isLoggedIn: true, isWorkspaceSuspended: false, onboardingStatus: OnboardingStatus.COMPLETED, res: defaultHomePagePath }, { loc: AppPath.ResetPassword, isLoggedIn: true, isWorkspaceSuspended: false, onboardingStatus: OnboardingStatus.PLAN_REQUIRED, res: '/plan-required' }, { loc: AppPath.ResetPassword, isLoggedIn: true, isWorkspaceSuspended: true, onboardingStatus: OnboardingStatus.COMPLETED, res: '/settings/billing' }, @@ -107,7 +107,7 @@ const testCases: { { loc: AppPath.ResetPassword, isLoggedIn: true, isWorkspaceSuspended: false, onboardingStatus: OnboardingStatus.PROFILE_CREATION, res: '/create/profile' }, { loc: AppPath.ResetPassword, isLoggedIn: true, isWorkspaceSuspended: false, onboardingStatus: OnboardingStatus.SYNC_EMAIL, res: '/sync/emails' }, { loc: AppPath.ResetPassword, isLoggedIn: true, isWorkspaceSuspended: false, onboardingStatus: OnboardingStatus.INVITE_TEAM, res: '/invite-team' }, - { loc: AppPath.ResetPassword, isLoggedIn: true, isWorkspaceSuspended: false, onboardingStatus: OnboardingStatus.COMPLETED, res: '/objects/companies' }, + { loc: AppPath.ResetPassword, isLoggedIn: true, isWorkspaceSuspended: false, onboardingStatus: OnboardingStatus.COMPLETED, res: undefined }, { loc: AppPath.VerifyEmail, isLoggedIn: true, isWorkspaceSuspended: false, onboardingStatus: OnboardingStatus.PLAN_REQUIRED, res: AppPath.PlanRequired }, { loc: AppPath.VerifyEmail, isLoggedIn: true, isWorkspaceSuspended: true, onboardingStatus: OnboardingStatus.COMPLETED, res: '/settings/billing' }, @@ -266,21 +266,27 @@ const testCases: { ]; describe('usePageChangeEffectNavigateLocation', () => { - testCases.forEach((testCase) => { - it(`with location ${testCase.loc} and onboardingStatus ${testCase.onboardingStatus} and isWorkspaceSuspended ${testCase.isWorkspaceSuspended} should return ${testCase.res}`, () => { - setupMockIsMatchingLocation(testCase.loc); - setupMockOnboardingStatus(testCase.onboardingStatus); - setupMockIsWorkspaceActivationStatusEqualsTo( - testCase.isWorkspaceSuspended, - ); - setupMockIsLogged(testCase.isLoggedIn); - setupMockUseParams(testCase.objectNamePluralFromParams); - setupMockRecoil(testCase.objectNamePluralFromMetadata); - - expect(usePageChangeEffectNavigateLocation()).toEqual(testCase.res); - }); - }); + it.each(testCases)( + 'with location $loc and onboardingStatus $onboardingStatus and isWorkspaceSuspended $isWorkspaceSuspended should return $res`', + ({ + loc, + onboardingStatus, + isWorkspaceSuspended, + isLoggedIn, + objectNamePluralFromParams, + objectNamePluralFromMetadata, + res, + }) => { + setupMockIsMatchingLocation(loc); + setupMockOnboardingStatus(onboardingStatus); + setupMockIsWorkspaceActivationStatusEqualsTo(isWorkspaceSuspended); + setupMockIsLogged(isLoggedIn); + setupMockUseParams(objectNamePluralFromParams); + setupMockRecoil(objectNamePluralFromMetadata); + expect(usePageChangeEffectNavigateLocation()).toEqual(res); + }, + ); describe('tests should be exhaustive', () => { it('all location, onboarding status and suspended/not suspended workspace activation status should be tested', () => { expect(testCases.length).toEqual( diff --git a/packages/twenty-front/src/hooks/usePageChangeEffectNavigateLocation.ts b/packages/twenty-front/src/hooks/usePageChangeEffectNavigateLocation.ts index fa792f23d..ed3845b14 100644 --- a/packages/twenty-front/src/hooks/usePageChangeEffectNavigateLocation.ts +++ b/packages/twenty-front/src/hooks/usePageChangeEffectNavigateLocation.ts @@ -19,27 +19,24 @@ export const usePageChangeEffectNavigateLocation = () => { const isWorkspaceSuspended = useIsWorkspaceActivationStatusEqualsTo( WorkspaceActivationStatus.SUSPENDED, ); - const { defaultHomePagePath } = useDefaultHomePagePath(); - const isMatchingOpenRoute = - isMatchingLocation(AppPath.Invite) || - isMatchingLocation(AppPath.ResetPassword); - - const isMatchingOngoingUserCreationRoute = - isMatchingOpenRoute || - isMatchingLocation(AppPath.SignInUp) || - isMatchingLocation(AppPath.VerifyEmail) || - isMatchingLocation(AppPath.Verify); - - const isMatchingOnboardingRoute = - isMatchingOngoingUserCreationRoute || - isMatchingLocation(AppPath.CreateWorkspace) || - isMatchingLocation(AppPath.CreateProfile) || - isMatchingLocation(AppPath.SyncEmails) || - isMatchingLocation(AppPath.InviteTeam) || - isMatchingLocation(AppPath.PlanRequired) || - isMatchingLocation(AppPath.PlanRequiredSuccess); + const someMatchingLocationOf = (appPaths: AppPath[]): boolean => + appPaths.some((appPath) => isMatchingLocation(appPath)); + const onGoingUserCreationPaths = [ + AppPath.Invite, + AppPath.SignInUp, + AppPath.VerifyEmail, + AppPath.Verify, + ]; + const onboardingPaths = [ + AppPath.CreateWorkspace, + AppPath.CreateProfile, + AppPath.SyncEmails, + AppPath.InviteTeam, + AppPath.PlanRequired, + AppPath.PlanRequiredSuccess, + ]; const objectNamePlural = useParams().objectNamePlural ?? ''; const objectMetadataItems = useRecoilValue(objectMetadataItemsState); @@ -47,14 +44,19 @@ export const usePageChangeEffectNavigateLocation = () => { (objectMetadataItem) => objectMetadataItem.namePlural === objectNamePlural, ); - if (!isLoggedIn && !isMatchingOngoingUserCreationRoute) { + if ( + !isLoggedIn && + !someMatchingLocationOf([ + ...onGoingUserCreationPaths, + AppPath.ResetPassword, + ]) + ) { return AppPath.SignInUp; } if ( onboardingStatus === OnboardingStatus.PLAN_REQUIRED && - !isMatchingLocation(AppPath.PlanRequired) && - !isMatchingLocation(AppPath.PlanRequiredSuccess) + !someMatchingLocationOf([AppPath.PlanRequired, AppPath.PlanRequiredSuccess]) ) { return AppPath.PlanRequired; } @@ -67,8 +69,10 @@ export const usePageChangeEffectNavigateLocation = () => { if ( onboardingStatus === OnboardingStatus.WORKSPACE_ACTIVATION && - !isMatchingLocation(AppPath.CreateWorkspace) && - !isMatchingLocation(AppPath.PlanRequiredSuccess) + !someMatchingLocationOf([ + AppPath.CreateWorkspace, + AppPath.PlanRequiredSuccess, + ]) ) { return AppPath.CreateWorkspace; } @@ -96,7 +100,8 @@ export const usePageChangeEffectNavigateLocation = () => { if ( onboardingStatus === OnboardingStatus.COMPLETED && - isMatchingOnboardingRoute && + someMatchingLocationOf([...onboardingPaths, ...onGoingUserCreationPaths]) && + !isMatchingLocation(AppPath.ResetPassword) && isLoggedIn ) { return defaultHomePagePath;