From ce89c7dcff4a612be8371c3bf87f952f16fa636e Mon Sep 17 00:00:00 2001 From: Prateek Shourya Date: Fri, 12 Jul 2024 17:17:58 +0530 Subject: [PATCH] [WEB-1929] chore: improve finishOnboarding logic to handle case where user profile setup is done and user already has a workspace. (#5105) --- web/app/onboarding/page.tsx | 27 ++++++++++++++----- .../lib/wrappers/authentication-wrapper.tsx | 4 +-- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/web/app/onboarding/page.tsx b/web/app/onboarding/page.tsx index b8cd881ad..ecfa07fcc 100644 --- a/web/app/onboarding/page.tsx +++ b/web/app/onboarding/page.tsx @@ -47,9 +47,12 @@ const OnboardingPage = observer(() => { user?.id && fetchWorkspaces(); }); // fetching user workspace invitations - const { isLoading: invitationsLoader, data: invitations } = useSWR("USER_WORKSPACE_INVITATIONS_LIST", () => { - if (user?.id) return workspaceService.userWorkspaceInvitations(); - }); + const { isLoading: invitationsLoader, data: invitations } = useSWR( + `USER_WORKSPACE_INVITATIONS_LIST_${user?.id}`, + () => { + if (user?.id) return workspaceService.userWorkspaceInvitations(); + } + ); // handle step change const stepChange = async (steps: Partial) => { if (!user) return; @@ -103,6 +106,16 @@ const OnboardingPage = observer(() => { // eslint-disable-next-line react-hooks/exhaustive-deps }, [userLoader, workspaceListLoader]); + // If the user completes the profile setup and has workspaces (through invitations), then finish the onboarding. + useEffect(() => { + if (userLoader === false && profile && workspaceListLoader === false) { + const onboardingStep = profile.onboarding_step; + if (onboardingStep.profile_complete && !onboardingStep.workspace_create && workspacesList.length > 0) + finishOnboarding(); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [userLoader, profile, workspaceListLoader]); + useEffect(() => { const handleStepChange = async () => { if (!user) return; @@ -111,10 +124,10 @@ const OnboardingPage = observer(() => { if (!onboardingStep.profile_complete) setStep(EOnboardingSteps.PROFILE_SETUP); - // For Invited Users, they will skip all other steps. - if (totalSteps && totalSteps <= 2) return; - - if (onboardingStep.profile_complete && !(onboardingStep.workspace_join || onboardingStep.workspace_create)) { + if ( + onboardingStep.profile_complete && + !(onboardingStep.workspace_join || onboardingStep.workspace_create || workspacesList?.length > 0) + ) { setStep(EOnboardingSteps.WORKSPACE_CREATE_OR_JOIN); } diff --git a/web/core/lib/wrappers/authentication-wrapper.tsx b/web/core/lib/wrappers/authentication-wrapper.tsx index 21690cf15..c868fd542 100644 --- a/web/core/lib/wrappers/authentication-wrapper.tsx +++ b/web/core/lib/wrappers/authentication-wrapper.tsx @@ -35,7 +35,7 @@ export const AuthenticationWrapper: FC = observer((props const { isLoading: isUserLoading, data: currentUser, fetchCurrentUser } = useUser(); const { data: currentUserProfile } = useUserProfile(); const { data: currentUserSettings } = useUserSettings(); - const { workspaces } = useWorkspace(); + const { loader: workspacesLoader, workspaces } = useWorkspace(); const { isLoading: isUserSWRLoading } = useSWR("USER_INFORMATION", async () => await fetchCurrentUser(), { revalidateOnFocus: false, @@ -73,7 +73,7 @@ export const AuthenticationWrapper: FC = observer((props return redirectionRoute; }; - if ((isUserSWRLoading || isUserLoading) && !currentUser?.id) + if ((isUserSWRLoading || isUserLoading || workspacesLoader) && !currentUser?.id) return (