45 lines · 1.6 KB · TypeScript
RawDownload
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<HomeProjectScope>,): EnvironmentProject | null {  const onlyScope = projectScopes.length === 1 ? projectScopes[0] : null;  return onlyScope?.representative ?? 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" };}