import type { EnvironmentProject } from "@t3tools/client-runtime/state/shell"; import type { EnvironmentId } from "@t3tools/contracts"; import { scopedProjectKey } from "../../lib/scopedEntities"; import type { HomeProjectScope } from "../home/homeThreadList"; type DraftProjectSelectionResolution = | { readonly kind: "preserve" } | { readonly kind: "select"; readonly project: EnvironmentProject } | { readonly kind: "pick" }; export function getProjectScopeSelectionTarget( scope: HomeProjectScope, preferredEnvironmentId: EnvironmentId | null, ): EnvironmentProject { return ( scope.projects.find((project) => project.environmentId === preferredEnvironmentId) ?? scope.representative ); } export function getOnlySelectableProject( projectScopes: ReadonlyArray, ): EnvironmentProject | null { const onlyScope = projectScopes.length === 1 ? projectScopes[0] : null; return onlyScope?.representative ?? null; } export function resolveDraftProjectSelection( selectedProjectKey: string | null, projects: ReadonlyArray, projectScopes: ReadonlyArray, ): 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" }; }