From 66a1bd39acf4811acc2fe3d8c2627db845f3bbe5 Mon Sep 17 00:00:00 2001 From: T3 Code PR Stack <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 28 Jul 2026 15:28:07 +0200 Subject: [PATCH] fix(ui): shorten repository project labels --- .../src/state/projectGrouping.test.ts | 38 +++++++++++++++++++ .../src/state/projectGrouping.ts | 14 +++---- 2 files changed, 45 insertions(+), 7 deletions(-) create mode 100644 packages/client-runtime/src/state/projectGrouping.test.ts diff --git a/packages/client-runtime/src/state/projectGrouping.test.ts b/packages/client-runtime/src/state/projectGrouping.test.ts new file mode 100644 index 00000000000..7f327cf33a2 --- /dev/null +++ b/packages/client-runtime/src/state/projectGrouping.test.ts @@ -0,0 +1,38 @@ +import { describe, expect, it } from "@effect/vitest"; + +import { deriveProjectGroupLabel } from "./projectGrouping.ts"; + +const repositoryIdentity = (owner: string, name: string) => ({ + canonicalKey: `github.com/${owner}/${name}`, + displayName: `${owner}/${name}`, + name, + owner, + locator: { + source: "git-remote" as const, + remoteName: "origin", + remoteUrl: `git@github.com:${owner}/${name}.git`, + }, +}); + +describe("deriveProjectGroupLabel", () => { + it("prefers the short repository name over the owner-qualified display name", () => { + const project = { + title: "Custom title", + repositoryIdentity: repositoryIdentity("pingdotgg", "t3code"), + }; + + expect(deriveProjectGroupLabel({ representative: project, members: [project] })).toBe("t3code"); + }); + + it("falls back to the display name when a repository name is unavailable", () => { + const { name: _name, ...identityWithoutName } = repositoryIdentity("macs-holding", "internal"); + const project = { + title: "Custom title", + repositoryIdentity: identityWithoutName, + }; + + expect(deriveProjectGroupLabel({ representative: project, members: [project] })).toBe( + "macs-holding/internal", + ); + }); +}); diff --git a/packages/client-runtime/src/state/projectGrouping.ts b/packages/client-runtime/src/state/projectGrouping.ts index ca804c13809..8659c9c2757 100644 --- a/packages/client-runtime/src/state/projectGrouping.ts +++ b/packages/client-runtime/src/state/projectGrouping.ts @@ -165,13 +165,6 @@ export function deriveProjectGroupLabel(input: { readonly representative: Pick; readonly members: ReadonlyArray>; }): string { - const sharedDisplayNames = uniqueNonEmptyValues( - input.members.map((member) => member.repositoryIdentity?.displayName), - ); - if (sharedDisplayNames.length === 1) { - return sharedDisplayNames[0]!; - } - const sharedRepositoryNames = uniqueNonEmptyValues( input.members.map((member) => member.repositoryIdentity?.name), ); @@ -179,5 +172,12 @@ export function deriveProjectGroupLabel(input: { return sharedRepositoryNames[0]!; } + const sharedDisplayNames = uniqueNonEmptyValues( + input.members.map((member) => member.repositoryIdentity?.displayName), + ); + if (sharedDisplayNames.length === 1) { + return sharedDisplayNames[0]!; + } + return input.representative.title; }