[WEB-1499] fix: fixed onboarding multiple redirections (#4920)
* fix: fixed onboarding multiple redirections * fix: removed else condition on redirection
This commit is contained in:
parent
e538bfad1f
commit
04eca3c9aa
2 changed files with 37 additions and 16 deletions
|
|
@ -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(() => {
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
);
|
||||
};
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue