Centralize workspace navigation behind a small route-derived API so the workspace shell reads active selection from the current Expo Router route instead of a separately synchronized store.
Remove the stale layout-driven active-workspace write that regressed web after 02e5b564.
52 lines
1.6 KiB
TypeScript
52 lines
1.6 KiB
TypeScript
import { navigateToWorkspace } from "@/hooks/use-workspace-navigation";
|
|
import { useWorkspaceLayoutStore } from "@/stores/workspace-layout-store";
|
|
import { generateDraftId } from "@/stores/draft-keys";
|
|
import {
|
|
buildWorkspaceTabPersistenceKey,
|
|
type WorkspaceTabTarget,
|
|
} from "@/stores/workspace-tabs-store";
|
|
import { buildHostWorkspaceRoute } from "@/utils/host-routes";
|
|
|
|
interface PrepareWorkspaceTabInput {
|
|
serverId: string;
|
|
workspaceId: string;
|
|
target: WorkspaceTabTarget;
|
|
pin?: boolean;
|
|
}
|
|
|
|
interface NavigateToPreparedWorkspaceTabInput extends PrepareWorkspaceTabInput {
|
|
currentPathname?: string | null;
|
|
}
|
|
|
|
function getPreparedTarget(target: WorkspaceTabTarget): WorkspaceTabTarget {
|
|
if (target.kind !== "draft" || target.draftId.trim() !== "new") {
|
|
return target;
|
|
}
|
|
return { kind: "draft", draftId: generateDraftId() };
|
|
}
|
|
|
|
export function prepareWorkspaceTab(input: PrepareWorkspaceTabInput) {
|
|
const target = getPreparedTarget(input.target);
|
|
const key =
|
|
buildWorkspaceTabPersistenceKey({
|
|
serverId: input.serverId,
|
|
workspaceId: input.workspaceId,
|
|
}) ?? "";
|
|
|
|
useWorkspaceLayoutStore.getState().openTabFocused(key, target);
|
|
|
|
if (input.pin && target.kind === "agent") {
|
|
useWorkspaceLayoutStore.getState().pinAgent(key, target.agentId);
|
|
}
|
|
|
|
return buildHostWorkspaceRoute(input.serverId, input.workspaceId);
|
|
}
|
|
|
|
export function navigateToPreparedWorkspaceTab(input: NavigateToPreparedWorkspaceTabInput): string {
|
|
const route = prepareWorkspaceTab(input);
|
|
navigateToWorkspace(input.serverId, input.workspaceId, {
|
|
currentPathname: input.currentPathname,
|
|
});
|
|
return route;
|
|
}
|