import type { EnvironmentProject } from "@t3tools/client-runtime/state/shell"; import { scopedProjectKey } from "../../lib/scopedEntities";import type { HomeProjectScope } from "../home/homeThreadList"; export type DraftProjectSelectionResolution = | { readonly kind: "preserve" } | { readonly kind: "select"; readonly project: EnvironmentProject } | { readonly kind: "pick" }; export function getOnlySelectableProject( projectScopes: ReadonlyArray<HomeProjectScope>,): EnvironmentProject | null { const onlyScope = projectScopes.length === 1 ? projectScopes[0] : null; return onlyScope?.projects.length === 1 ? (onlyScope.projects[0] ?? null) : null;} export function resolveDraftProjectSelection( selectedProjectKey: string | null, projects: ReadonlyArray<EnvironmentProject>, projectScopes: ReadonlyArray<HomeProjectScope>,): DraftProjectSelectionResolution { const hasExplicitProjectSelection = selectedProjectKey !== null && projects.some( (project) => scopedProjectKey(project.environmentId, project.id) === selectedProjectKey, ); if (hasExplicitProjectSelection) { return { kind: "preserve" }; } const onlyProject = getOnlySelectableProject(projectScopes); return onlyProject ? { kind: "select", project: onlyProject } : { kind: "pick" };}
import type { EnvironmentProject } from "@t3tools/client-runtime/state/shell";
import { scopedProjectKey } from "../../lib/scopedEntities";
import type { HomeProjectScope } from "../home/homeThreadList";
export type DraftProjectSelectionResolution =
| { readonly kind: "preserve" }
| { readonly kind: "select"; readonly project: EnvironmentProject }
| { readonly kind: "pick" };
export function getOnlySelectableProject(
projectScopes: ReadonlyArray<HomeProjectScope>,
): EnvironmentProject | null {
const onlyScope = projectScopes.length === 1 ? projectScopes[0] : null;
return onlyScope?.projects.length === 1 ? (onlyScope.projects[0] ?? null) : null;
}
export function resolveDraftProjectSelection(
selectedProjectKey: string | null,
projects: ReadonlyArray<EnvironmentProject>,
projectScopes: ReadonlyArray<HomeProjectScope>,
): DraftProjectSelectionResolution {
const hasExplicitProjectSelection =
selectedProjectKey !== null &&
projects.some(
(project) => scopedProjectKey(project.environmentId, project.id) === selectedProjectKey,
);
if (hasExplicitProjectSelection) {
return { kind: "preserve" };
}
const onlyProject = getOnlySelectableProject(projectScopes);
return onlyProject ? { kind: "select", project: onlyProject } : { kind: "pick" };
}