diff --git a/app/client/src/pages/setup/SignupSuccess.tsx b/app/client/src/pages/setup/SignupSuccess.tsx index af8ee38754..2cf3e9e9db 100644 --- a/app/client/src/pages/setup/SignupSuccess.tsx +++ b/app/client/src/pages/setup/SignupSuccess.tsx @@ -1,7 +1,7 @@ import { ReduxActionTypes } from "ee/constants/ReduxActionConstants"; import { requiresAuth } from "pages/UserAuth/requiresAuthHOC"; import React from "react"; -import { useCallback } from "react"; +import { useCallback, useState } from "react"; import { useEffect } from "react"; import { useDispatch, useSelector } from "react-redux"; import { getCurrentUser } from "selectors/usersSelectors"; @@ -16,6 +16,7 @@ import { redirectUserAfterSignup } from "ee/utils/signupHelpers"; import { setUserSignedUpFlag } from "utils/storage"; import AnalyticsUtil from "ee/utils/AnalyticsUtil"; import { getIsAiAgentInstanceEnabled } from "ee/selectors/aiAgentSelectors"; +import { useIsCloudBillingEnabled } from "hooks/useIsCloudBillingEnabled"; export function SignupSuccess() { const dispatch = useDispatch(); @@ -25,50 +26,78 @@ export function SignupSuccess() { "enableFirstTimeUserExperience", ); const isAiAgentInstanceEnabled = useSelector(getIsAiAgentInstanceEnabled); + const isMultiOrgEnabled = useIsCloudBillingEnabled(); const validLicense = useSelector(isValidLicense); const user = useSelector(getCurrentUser); const isOnLoginPage = !useSelector(isWithinAnOrganization); + const [isRedirecting, setIsRedirecting] = useState(false); + useEffect(() => { user?.email && setUserSignedUpFlag(user?.email); }, []); const isNonInvitedUser = shouldEnableFirstTimeUserOnboarding === "true"; - const redirectUsingQueryParam = useCallback( - () => - redirectUserAfterSignup({ + const redirectUsingQueryParam = useCallback(async () => { + if (isRedirecting) return; + + setIsRedirecting(true); + + try { + await redirectUserAfterSignup({ redirectUrl, shouldEnableFirstTimeUserOnboarding, validLicense, dispatch, isAiAgentInstanceEnabled, + isMultiOrgEnabled, isOnLoginPage, - }), - [ - dispatch, - isNonInvitedUser, - isOnLoginPage, - redirectUrl, - shouldEnableFirstTimeUserOnboarding, - validLicense, - ], + }); + } catch (err) { + setIsRedirecting(false); + } + }, [ + dispatch, + isNonInvitedUser, + isOnLoginPage, + redirectUrl, + shouldEnableFirstTimeUserOnboarding, + validLicense, + isAiAgentInstanceEnabled, + isMultiOrgEnabled, + ]); + + const onGetStarted = useCallback( + async (proficiency?: string, useCase?: string) => { + dispatch({ + type: ReduxActionTypes.UPDATE_USER_DETAILS_INIT, + payload: { + proficiency, + useCase, + }, + }); + AnalyticsUtil.logEvent("GET_STARTED_CLICKED", { + proficiency, + goal: useCase, + }); + await redirectUsingQueryParam(); + }, + [redirectUsingQueryParam], ); - const onGetStarted = useCallback((proficiency?: string, useCase?: string) => { - dispatch({ - type: ReduxActionTypes.UPDATE_USER_DETAILS_INIT, - payload: { - proficiency, - useCase, - }, - }); - AnalyticsUtil.logEvent("GET_STARTED_CLICKED", { - proficiency, - goal: useCase, - }); - redirectUsingQueryParam(); - }, []); + const shouldAutoRedirect = + user?.isSuperUser || + ((user?.role || user?.proficiency) && user?.useCase) || + shouldEnableFirstTimeUserOnboarding !== "true" || + isAiAgentInstanceEnabled || + isMultiOrgEnabled; + + useEffect(() => { + if (shouldAutoRedirect && !isRedirecting) { + redirectUsingQueryParam(); + } + }, [shouldAutoRedirect, redirectUsingQueryParam, isRedirecting]); /* * Proceed with redirection, @@ -78,15 +107,7 @@ export function SignupSuccess() { * We identify an invited user based on `enableFirstTimeUserExperience` flag in url. */ //TODO(Balaji): Factor in case, where user had closed the tab, while filling the form.And logs back in again. - if ( - user?.isSuperUser || - ((user?.role || user?.proficiency) && user?.useCase) || - shouldEnableFirstTimeUserOnboarding !== "true" || - isAiAgentInstanceEnabled - ) { - redirectUsingQueryParam(); - - // Showing a loader until the redirect + if (shouldAutoRedirect) { return (