* fix(app): make new workspace global New Workspace now opens as an app-wide screen. Host and project context can still preselect the form through query params, but the route itself no longer lives under a host. * fix(app): simplify new workspace selection
33 lines
1.1 KiB
TypeScript
33 lines
1.1 KiB
TypeScript
import type { Href } from "expo-router";
|
|
import type { WorkspaceDescriptor } from "@/stores/session-store";
|
|
import { buildHostRootRoute, buildNewWorkspaceRoute } from "@/utils/host-routes";
|
|
import { resolveWorkspaceRouteId } from "@/utils/workspace-identity";
|
|
|
|
export function buildWorkspaceArchiveRedirectRoute(input: {
|
|
serverId: string;
|
|
archivedWorkspaceId: string;
|
|
workspaces: Iterable<WorkspaceDescriptor>;
|
|
}): Href {
|
|
const archivedWorkspaceId = resolveWorkspaceRouteId({
|
|
routeWorkspaceId: input.archivedWorkspaceId,
|
|
});
|
|
if (!archivedWorkspaceId) {
|
|
return buildHostRootRoute(input.serverId);
|
|
}
|
|
|
|
const archivedWorkspace =
|
|
Array.from(input.workspaces).find((workspace) => workspace.id === archivedWorkspaceId) ?? null;
|
|
const sourceDirectory =
|
|
archivedWorkspace?.projectRootPath || archivedWorkspace?.workspaceDirectory;
|
|
if (!sourceDirectory) {
|
|
return buildHostRootRoute(input.serverId);
|
|
}
|
|
|
|
return buildNewWorkspaceRoute({
|
|
serverId: input.serverId,
|
|
sourceDirectory,
|
|
displayName: archivedWorkspace.projectDisplayName,
|
|
projectId: archivedWorkspace.projectId,
|
|
});
|
|
}
|