Make worktree archive optimistic
This commit is contained in:
@@ -1,55 +1,28 @@
|
||||
import type { WorkspaceDescriptor } from "@/stores/session-store";
|
||||
import { buildHostRootRoute, buildHostWorkspaceRoute } from "@/utils/host-routes";
|
||||
import { buildHostNewWorkspaceRoute, buildHostRootRoute } from "@/utils/host-routes";
|
||||
import { resolveWorkspaceRouteId } from "@/utils/workspace-execution";
|
||||
|
||||
export function resolveWorkspaceArchiveRedirectWorkspaceId(input: {
|
||||
archivedWorkspaceId: string;
|
||||
workspaces: Iterable<WorkspaceDescriptor>;
|
||||
}): string | null {
|
||||
const archivedWorkspaceId = resolveWorkspaceRouteId({
|
||||
routeWorkspaceId: input.archivedWorkspaceId,
|
||||
});
|
||||
if (!archivedWorkspaceId) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const workspaces = Array.from(input.workspaces);
|
||||
const archivedWorkspace =
|
||||
workspaces.find((workspace) => workspace.id === archivedWorkspaceId) ?? null;
|
||||
if (!archivedWorkspace) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const sameProjectWorkspaces = workspaces.filter(
|
||||
(workspace) => workspace.projectId === archivedWorkspace.projectId,
|
||||
);
|
||||
const rootCheckoutWorkspace =
|
||||
sameProjectWorkspaces.find(
|
||||
(workspace) =>
|
||||
workspace.workspaceKind === "local_checkout" && workspace.id !== archivedWorkspace.id,
|
||||
) ?? null;
|
||||
if (rootCheckoutWorkspace) {
|
||||
return rootCheckoutWorkspace.id;
|
||||
}
|
||||
|
||||
const siblingWorkspace =
|
||||
sameProjectWorkspaces.find((workspace) => workspace.id !== archivedWorkspace.id) ?? null;
|
||||
return siblingWorkspace?.id ?? null;
|
||||
}
|
||||
|
||||
export function buildWorkspaceArchiveRedirectRoute(input: {
|
||||
serverId: string;
|
||||
archivedWorkspaceId: string;
|
||||
workspaces: Iterable<WorkspaceDescriptor>;
|
||||
}) {
|
||||
const redirectWorkspaceId = resolveWorkspaceArchiveRedirectWorkspaceId({
|
||||
archivedWorkspaceId: input.archivedWorkspaceId,
|
||||
workspaces: input.workspaces,
|
||||
const archivedWorkspaceId = resolveWorkspaceRouteId({
|
||||
routeWorkspaceId: input.archivedWorkspaceId,
|
||||
});
|
||||
|
||||
if (!redirectWorkspaceId) {
|
||||
if (!archivedWorkspaceId) {
|
||||
return buildHostRootRoute(input.serverId);
|
||||
}
|
||||
|
||||
return buildHostWorkspaceRoute(input.serverId, redirectWorkspaceId);
|
||||
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 buildHostNewWorkspaceRoute(input.serverId, sourceDirectory, {
|
||||
displayName: archivedWorkspace.projectDisplayName,
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user