Fix duplicate workspace shell navigation

This commit is contained in:
Mohamed Boudra
2026-05-05 21:55:57 +07:00
parent 60531b5e1b
commit 02e5b56408
12 changed files with 96 additions and 62 deletions
@@ -8,6 +8,7 @@ const { platformState, routerMock } = vi.hoisted(() => ({
routerMock: {
back: vi.fn(),
canGoBack: vi.fn(() => false),
dismissTo: vi.fn(),
navigate: vi.fn(),
replace: vi.fn(),
},
@@ -60,6 +61,7 @@ describe("prepareWorkspaceTab", () => {
routerMock.back.mockReset();
routerMock.canGoBack.mockReset();
routerMock.canGoBack.mockReturnValue(false);
routerMock.dismissTo.mockReset();
routerMock.navigate.mockReset();
routerMock.replace.mockReset();
syncNavigationActiveWorkspace({ current: null });
@@ -106,6 +108,7 @@ describe("prepareWorkspaceTab", () => {
expect(route).toBe("/h/server-1/workspace/b64_L3JlcG8vd29ya3RyZWU");
expect(routerMock.back).toHaveBeenCalledOnce();
expect(routerMock.dismissTo).not.toHaveBeenCalled();
expect(routerMock.replace).not.toHaveBeenCalled();
vi.runAllTimers();
@@ -1,5 +1,6 @@
import { router, type Href } from "expo-router";
import { router } from "expo-router";
import { isNative } from "@/constants/platform";
import { navigateToWorkspace } from "@/hooks/use-workspace-navigation";
import {
activateNavigationWorkspaceSelection,
getLastNavigationWorkspaceRouteSelection,
@@ -22,6 +23,7 @@ interface PrepareWorkspaceTabInput {
interface NavigateToPreparedWorkspaceTabInput extends PrepareWorkspaceTabInput {
navigationMethod?: "navigate" | "replace";
currentPathname?: string | null;
}
function getPreparedTarget(target: WorkspaceTabTarget): WorkspaceTabTarget {
@@ -65,9 +67,13 @@ export function navigateToPreparedWorkspaceTab(input: NavigateToPreparedWorkspac
}, 0);
return route;
}
router.replace(route as Href);
navigateToWorkspace(input.serverId, input.workspaceId, {
currentPathname: input.currentPathname,
});
} else {
router.navigate(route as Href);
navigateToWorkspace(input.serverId, input.workspaceId, {
currentPathname: input.currentPathname,
});
}
return route;
}