34 lines · 1.3 KB · TypeScript
RawDownload
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" };}