PromucFlow_constructor/app/client/src/pages/setup/SignupSuccess.tsx
Pawan Kumar c8c15270eb
chore streamline signup redirection logic CE (#40063)
CE PR

/ok-to-test tags="@tag.Sanity"

<!-- This is an auto-generated comment: Cypress test results  -->
> [!TIP]
> 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉
> Workflow run:
<https://github.com/appsmithorg/appsmith/actions/runs/14240869595>
> Commit: 50725a8e93d6e0e2cedcb06022aec348fe77eb7f
> <a
href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=14240869595&attempt=1"
target="_blank">Cypress dashboard</a>.
> Tags: `@tag.Sanity`
> Spec:
> <hr>Thu, 03 Apr 2025 11:15:59 UTC
<!-- end of auto-generated comment: Cypress test results  -->


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

- **New Features**
- Enhanced navigation in the Widgets Editor with improved redirection
behavior for agent-related flows.
- Integrated AI agent flow status into the signup process to optimize
user redirection.

- **Refactor**
- Streamlined the user redirection logic by consolidating parameters and
simplifying action dispatching.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-04-03 16:48:45 +05:30

101 lines
3.3 KiB
TypeScript

import { ReduxActionTypes } from "ee/constants/ReduxActionConstants";
import { requiresAuth } from "pages/UserAuth/requiresAuthHOC";
import React from "react";
import { useCallback } from "react";
import { useEffect } from "react";
import { useDispatch, useSelector } from "react-redux";
import { getCurrentUser } from "selectors/usersSelectors";
import UserWelcomeScreen from "pages/setup/UserWelcomeScreen";
import { Center } from "pages/setup/common";
import { Spinner } from "@appsmith/ads";
import {
isValidLicense,
isWithinAnOrganization,
} from "ee/selectors/organizationSelectors";
import { redirectUserAfterSignup } from "ee/utils/signupHelpers";
import { setUserSignedUpFlag } from "utils/storage";
import AnalyticsUtil from "ee/utils/AnalyticsUtil";
import { getIsAiAgentFlowEnabled } from "ee/selectors/aiAgentSelectors";
export function SignupSuccess() {
const dispatch = useDispatch();
const urlObject = new URL(window.location.href);
const redirectUrl = urlObject?.searchParams.get("redirectUrl") ?? "";
const shouldEnableFirstTimeUserOnboarding = urlObject?.searchParams.get(
"enableFirstTimeUserExperience",
);
const isAiAgentFlowEnabled = useSelector(getIsAiAgentFlowEnabled);
const validLicense = useSelector(isValidLicense);
const user = useSelector(getCurrentUser);
const isOnLoginPage = !useSelector(isWithinAnOrganization);
useEffect(() => {
user?.email && setUserSignedUpFlag(user?.email);
}, []);
const isNonInvitedUser = shouldEnableFirstTimeUserOnboarding === "true";
const redirectUsingQueryParam = useCallback(
() =>
redirectUserAfterSignup({
redirectUrl,
shouldEnableFirstTimeUserOnboarding,
validLicense,
dispatch,
isAiAgentFlowEnabled,
isOnLoginPage,
}),
[
dispatch,
isNonInvitedUser,
isOnLoginPage,
redirectUrl,
shouldEnableFirstTimeUserOnboarding,
validLicense,
],
);
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();
}, []);
/*
* Proceed with redirection,
* For a super user, since we already collected role and useCase during signup
* For a normal user, who has filled in their role and useCase and try to visit signup-success url by entering manually.
* For an invited user, we don't want to collect the data. we just want to redirect to the workspace they have been invited to.
* 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" ||
isAiAgentFlowEnabled
) {
redirectUsingQueryParam();
// Showing a loader until the redirect
return (
<Center>
<Spinner size="lg" />
</Center>
);
}
return <UserWelcomeScreen isSuperUser={false} onGetStarted={onGetStarted} />;
}
export default requiresAuth(SignupSuccess);