From 5b939eb01f7ff7a05c2fdc32cf1308fe05ecfa36 Mon Sep 17 00:00:00 2001 From: nina992 <89770889+nina992@users.noreply.github.com> Date: Fri, 23 Jun 2023 11:34:22 +0300 Subject: [PATCH] fix(web): wrong workspace when sharing link (#506) Co-authored-by: nina992 Co-authored-by: Piyush Chauhan <42397980+pyshx@users.noreply.github.com> --- web/src/beta/features/Navbar/hooks.ts | 18 ++++---- .../molecules/EarthEditor/Header/index.tsx | 6 +-- .../components/organisms/Dashboard/hooks.ts | 24 +++++++--- .../organisms/EarthEditor/Header/hooks.ts | 44 +++++++++---------- .../organisms/EarthEditor/Header/index.tsx | 8 ++-- 5 files changed, 54 insertions(+), 46 deletions(-) diff --git a/web/src/beta/features/Navbar/hooks.ts b/web/src/beta/features/Navbar/hooks.ts index 984a50134..d1b8ee052 100644 --- a/web/src/beta/features/Navbar/hooks.ts +++ b/web/src/beta/features/Navbar/hooks.ts @@ -59,16 +59,14 @@ export default (sceneId: string) => { const handleWorkspaceModalClose = useCallback(() => setWorkspaceModalVisible(false), []); useEffect(() => { - if (!currentWorkspace && lastWorkspace) setWorkspace(lastWorkspace); - }, [currentWorkspace, lastWorkspace, setWorkspace]); - - useEffect(() => { - if (currentWorkspace) return; - const workspace = workspaces?.find(t => t.id === workspaceId); - if (!workspace) return; - setWorkspace(workspace); - setLastWorkspace(currentWorkspace); - }, [workspaces, currentWorkspace, setWorkspace, setLastWorkspace, workspaceId]); + if (!currentWorkspace && lastWorkspace && workspaceId == lastWorkspace.id) + setWorkspace(lastWorkspace); + else { + const workspace = workspaces?.find(workspace => workspace.id === workspaceId); + setWorkspace(workspace); + setLastWorkspace(workspace); + } + }, [currentWorkspace, lastWorkspace, setLastWorkspace, setWorkspace, workspaceId, workspaces]); useEffect(() => { setProject(p => diff --git a/web/src/classic/components/molecules/EarthEditor/Header/index.tsx b/web/src/classic/components/molecules/EarthEditor/Header/index.tsx index f9dda9776..e561e3097 100644 --- a/web/src/classic/components/molecules/EarthEditor/Header/index.tsx +++ b/web/src/classic/components/molecules/EarthEditor/Header/index.tsx @@ -28,7 +28,7 @@ export type Project = { export type Props = { currentProject?: Project; currentProjectStatus?: Status; - teamId?: string; + workspaceId?: string; onPublishmentStatusClick?: (p: publishingType) => void; onPreviewOpen?: () => void; } & CommonHeaderProps; @@ -36,7 +36,7 @@ export type Props = { const Header: React.FC = ({ currentProject, currentProjectStatus, - teamId, + workspaceId, onPublishmentStatusClick, onPreviewOpen, ...props @@ -53,7 +53,7 @@ const Header: React.FC = ({ }, [currentProjectStatus]); const center = currentProject && ( - + ); const right = ( diff --git a/web/src/classic/components/organisms/Dashboard/hooks.ts b/web/src/classic/components/organisms/Dashboard/hooks.ts index 597f1ffbf..ede345350 100644 --- a/web/src/classic/components/organisms/Dashboard/hooks.ts +++ b/web/src/classic/components/organisms/Dashboard/hooks.ts @@ -43,10 +43,6 @@ export default (workspaceId?: string) => { const t = useT(); const navigate = useNavigate(); - useEffect(() => { - if (!currentWorkspace && lastWorkspace) setCurrentWorkspace(lastWorkspace); - }, [currentWorkspace, lastWorkspace, setCurrentWorkspace]); - const toPublishmentStatus = (s: PublishmentStatus) => s === PublishmentStatus.Public ? "published" @@ -64,14 +60,28 @@ export default (workspaceId?: string) => { const gqlCache = useApolloClient().cache; useEffect(() => { - if (workspace?.id && workspace.id !== currentWorkspace?.id) { + if (!currentWorkspace && lastWorkspace && lastWorkspace.id === workspaceId) + setCurrentWorkspace(lastWorkspace); + else if (workspace) { setCurrentWorkspace({ personal, ...workspace, }); - setLastWorkspace(currentWorkspace); + setLastWorkspace({ + personal, + ...workspace, + }); } - }, [currentWorkspace, workspace, setCurrentWorkspace, personal, setLastWorkspace]); + }, [ + currentWorkspace, + workspace, + setCurrentWorkspace, + personal, + setLastWorkspace, + lastWorkspace, + workspaceId, + workspaces, + ]); const handleWorkspaceChange = useCallback( (workspaceId: string) => { diff --git a/web/src/classic/components/organisms/EarthEditor/Header/hooks.ts b/web/src/classic/components/organisms/EarthEditor/Header/hooks.ts index 02364dd36..bf14ecced 100644 --- a/web/src/classic/components/organisms/EarthEditor/Header/hooks.ts +++ b/web/src/classic/components/organisms/EarthEditor/Header/hooks.ts @@ -46,14 +46,15 @@ export default () => { const [projectAlias, setProjectAlias] = useState(); - const { data: teamsData } = useGetTeamsQuery(); - const teams = teamsData?.me?.teams; + const { data: WorkspacesData } = useGetTeamsQuery(); + const workspaces = WorkspacesData?.me?.teams; const { data } = useGetProjectBySceneQuery({ variables: { sceneId: sceneId ?? "" }, skip: !sceneId, }); - const teamId = data?.node?.__typename === "Scene" ? data.node.teamId : undefined; + + const workspaceId = data?.node?.__typename === "Scene" ? data.node.teamId : undefined; const project = useMemo( () => data?.node?.__typename === "Scene" && data.node.project @@ -63,7 +64,7 @@ export default () => { ); const user: User = { - name: teamsData?.me?.name || "", + name: WorkspacesData?.me?.name || "", }; const [validAlias, setValidAlias] = useState(false); @@ -80,9 +81,16 @@ export default () => { }, [checkProjectAliasQuery, project], ); + useEffect(() => { - if (!currentWorkspace && lastWorkspace) setWorkspace(lastWorkspace); - }, [currentWorkspace, lastWorkspace, setWorkspace]); + if (!currentWorkspace && lastWorkspace && workspaceId == lastWorkspace.id) + setWorkspace(lastWorkspace); + else { + const workspace = workspaces?.find(workspace => workspace.id === workspaceId); + setWorkspace(workspace); + setLastWorkspace(workspace); + } + }, [currentWorkspace, lastWorkspace, setLastWorkspace, setWorkspace, workspaceId, workspaces]); useEffect(() => { setValidAlias( @@ -94,14 +102,6 @@ export default () => { ); }, [validatingAlias, checkProjectAliasData, project]); - useEffect(() => { - if (currentWorkspace) return; - const team = teams?.find(t => t.id === teamId); - if (!team) return; - setWorkspace(team); - setLastWorkspace(currentWorkspace); - }, [teams, currentWorkspace, teamId, setWorkspace, setLastWorkspace]); - useEffect(() => { setProject(p => p?.id !== project?.id @@ -171,16 +171,16 @@ export default () => { ); const handleTeamChange = useCallback( - (teamId: string) => { - const team = teams?.find(team => team.id === teamId); - if (team && teamId !== currentWorkspace?.id) { - setWorkspace(team); + (workspaceId: string) => { + const workspace = workspaces?.find(workspace => workspace.id === workspaceId); + if (workspace && workspaceId !== currentWorkspace?.id) { + setWorkspace(workspace); setLastWorkspace(currentWorkspace); - navigate(`/dashboard/${teamId}`); + navigate(`/dashboard/${workspaceId}`); } }, - [teams, currentWorkspace, setWorkspace, setLastWorkspace, navigate], + [workspaces, currentWorkspace, setWorkspace, setLastWorkspace, navigate], ); const [createTeamMutation] = useCreateTeamMutation(); @@ -217,8 +217,8 @@ export default () => { }, [t, setNotification]); return { - teams, - teamId, + workspaces, + workspaceId, publicationModalVisible, searchIndex, publishing, diff --git a/web/src/classic/components/organisms/EarthEditor/Header/index.tsx b/web/src/classic/components/organisms/EarthEditor/Header/index.tsx index 841044981..0ef28dff1 100644 --- a/web/src/classic/components/organisms/EarthEditor/Header/index.tsx +++ b/web/src/classic/components/organisms/EarthEditor/Header/index.tsx @@ -14,8 +14,8 @@ export type Props = { const Header: React.FC = ({ className }) => { const { - teams = [], - teamId, + workspaces = [], + workspaceId, publicationModalVisible, searchIndex, publishing, @@ -51,8 +51,8 @@ const Header: React.FC = ({ className }) => { currentProjectStatus={projectStatus} currentProject={currentProject} user={user} - workspaces={teams} - teamId={teamId} + workspaces={workspaces} + workspaceId={workspaceId} currentWorkspace={currentWorkspace} modalShown={workspaceModalVisible} onPublishmentStatusClick={handlePublicationModalOpen}