[WEB-1499] fix: fixed onboarding multiple redirections (#4920)

* fix: fixed onboarding multiple redirections

* fix: removed else condition on redirection
This commit is contained in:
guru_sainath 2024-06-24 17:26:29 +05:30 committed by GitHub
parent e538bfad1f
commit 04eca3c9aa
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 37 additions and 16 deletions

View file

@ -14,7 +14,7 @@ import { USER_WORKSPACES_LIST } from "@/constants/fetch-keys";
// helpers
import { EPageTypes } from "@/helpers/authentication.helper";
// hooks
import { useUser, useWorkspace, useUserProfile, useEventTracker } from "@/hooks/store";
import { useUser, useWorkspace, useUserProfile, useEventTracker, useUserSettings } from "@/hooks/store";
import { useAppRouter } from "@/hooks/use-app-router";
// wrappers
import { AuthenticationWrapper } from "@/lib/wrappers";
@ -39,6 +39,7 @@ const OnboardingPage = observer(() => {
const { captureEvent } = useEventTracker();
const { isLoading: userLoader, data: user, updateCurrentUser } = useUser();
const { data: profile, updateUserOnBoard, updateUserProfile } = useUserProfile();
const { data: currentUserSettings } = useUserSettings();
const { workspaces, fetchWorkspaces } = useWorkspace();
// computed values
@ -65,6 +66,27 @@ const OnboardingPage = observer(() => {
await updateUserProfile(payload);
};
const getWorkspaceRedirectionUrl = (): string => {
let redirectionRoute = "/profile";
// validate the last and fallback workspace_slug
const currentWorkspaceSlug =
currentUserSettings?.workspace?.last_workspace_slug ||
currentUserSettings?.workspace?.fallback_workspace_slug ||
undefined;
if (currentWorkspaceSlug) {
const isCurrentWorkspaceValid = Object.values(workspaces || {}).findIndex(
(workspace) => workspace.slug === currentWorkspaceSlug
);
if (isCurrentWorkspaceValid >= 0) {
redirectionRoute = `/${currentWorkspaceSlug}`;
}
}
return redirectionRoute;
};
// complete onboarding
const finishOnboarding = async () => {
if (!user || !workspaces) return;
@ -95,7 +117,7 @@ const OnboardingPage = observer(() => {
console.log("Failed to update onboarding status");
});
router.replace(`/${firstWorkspace?.slug}`);
router.replace(`${getWorkspaceRedirectionUrl()}`);
};
useEffect(() => {

View file

@ -1,6 +1,7 @@
"use client";
import { useState } from "react";
import { observer } from "mobx-react";
import { Controller, useForm } from "react-hook-form";
// types
import { IUser, IWorkspace, TOnboardingSteps } from "@plane/types";
@ -10,7 +11,7 @@ import { Button, CustomSelect, Input, Spinner, TOAST_TYPE, setToast } from "@pla
import { E_ONBOARDING, WORKSPACE_CREATED } from "@/constants/event-tracker";
import { ORGANIZATION_SIZE, RESTRICTED_URLS } from "@/constants/workspace";
// hooks
import { useEventTracker, useUserProfile, useWorkspace } from "@/hooks/store";
import { useEventTracker, useUserProfile, useUserSettings, useWorkspace } from "@/hooks/store";
// services
import { WorkspaceService } from "@/services/workspace.service";
@ -24,15 +25,15 @@ type Props = {
// services
const workspaceService = new WorkspaceService();
export const CreateWorkspace: React.FC<Props> = (props) => {
export const CreateWorkspace: React.FC<Props> = observer((props) => {
const { stepChange, user, invitedWorkspaces, handleCurrentViewChange } = props;
// states
const [slugError, setSlugError] = useState(false);
const [invalidSlug, setInvalidSlug] = useState(false);
// store hooks
const { updateUserProfile } = useUserProfile();
const { createWorkspace, fetchWorkspaces, workspaces } = useWorkspace();
const { fetchCurrentUserSettings } = useUserSettings();
const { createWorkspace, fetchWorkspaces } = useWorkspace();
const { captureWorkspaceEvent } = useEventTracker();
// form info
const {
@ -59,7 +60,7 @@ export const CreateWorkspace: React.FC<Props> = (props) => {
setSlugError(false);
await createWorkspace(formData)
.then(async (res) => {
.then(async (workspaceResponse) => {
setToast({
type: TOAST_TYPE.SUCCESS,
title: "Success!",
@ -68,14 +69,14 @@ export const CreateWorkspace: React.FC<Props> = (props) => {
captureWorkspaceEvent({
eventName: WORKSPACE_CREATED,
payload: {
...res,
...workspaceResponse,
state: "SUCCESS",
first_time: true,
element: E_ONBOARDING,
},
});
await fetchWorkspaces();
await completeStep();
await completeStep(workspaceResponse.id);
})
.catch(() => {
captureWorkspaceEvent({
@ -103,11 +104,8 @@ export const CreateWorkspace: React.FC<Props> = (props) => {
);
};
const completeStep = async () => {
if (!user || !workspaces) return;
const firstWorkspace = Object.values(workspaces ?? {})?.[0];
const completeStep = async (workspaceId: string) => {
if (!user) return;
const payload: Partial<TOnboardingSteps> = {
workspace_create: true,
workspace_join: true,
@ -115,8 +113,9 @@ export const CreateWorkspace: React.FC<Props> = (props) => {
await stepChange(payload);
await updateUserProfile({
last_workspace_id: firstWorkspace?.id,
last_workspace_id: workspaceId,
});
await fetchCurrentUserSettings();
};
const isButtonDisabled = !isValid || invalidSlug || isSubmitting;
@ -286,4 +285,4 @@ export const CreateWorkspace: React.FC<Props> = (props) => {
</form>
</div>
);
};
});