From 705ea0268a2f436e05ec10729a7d657f7523e3d0 Mon Sep 17 00:00:00 2001 From: Bryan Helmkamp Date: Sat, 9 May 2026 15:33:19 -0400 Subject: [PATCH] refactor(run-files): extract commit picker options --- apps/fabro-web/app/routes/run-files.test.ts | 6 ++- apps/fabro-web/app/routes/run-files.tsx | 36 +----------------- .../app/routes/run-files/commit-options.ts | 37 +++++++++++++++++++ 3 files changed, 42 insertions(+), 37 deletions(-) create mode 100644 apps/fabro-web/app/routes/run-files/commit-options.ts diff --git a/apps/fabro-web/app/routes/run-files.test.ts b/apps/fabro-web/app/routes/run-files.test.ts index cbebfd270..1f81f10e5 100644 --- a/apps/fabro-web/app/routes/run-files.test.ts +++ b/apps/fabro-web/app/routes/run-files.test.ts @@ -1,13 +1,15 @@ import { describe, expect, test } from "bun:test"; import { - buildRunCommitOptions, deepLinkToastMessage, emptyTransitionToastMessage, extractRequestId, - fabroGeneratedCommitStage, normalizeRunFileScope, } from "./run-files"; +import { + buildRunCommitOptions, + fabroGeneratedCommitStage, +} from "./run-files/commit-options"; function buildRunFilesPayload({ files = [], diff --git a/apps/fabro-web/app/routes/run-files.tsx b/apps/fabro-web/app/routes/run-files.tsx index 7a2e70fb3..03f3b647f 100644 --- a/apps/fabro-web/app/routes/run-files.tsx +++ b/apps/fabro-web/app/routes/run-files.tsx @@ -19,7 +19,6 @@ import { useToast } from "../components/toast"; import type { FileDiff as ApiFileDiff, PaginatedRunFileList, - RunCommit, } from "@qltysh/fabro-api-client"; import { DegradedBanner, @@ -37,11 +36,11 @@ import { import { useFileKeyboardNav } from "./run-files/keyboard"; import { Toolbar, - type DiffCommitOption, type DiffPickerValue, type DiffStyle, } from "./run-files/toolbar"; import { fileCacheKey, stringHash } from "./run-files/cache-keys"; +import { buildRunCommitOptions } from "./run-files/commit-options"; import { VirtualizedDiffList } from "./run-files/virtualized-diff-list"; import { ApiError, extractRequestId } from "../lib/api-client"; import { useRun, useRunCommits, useRunFiles } from "../lib/queries"; @@ -77,39 +76,6 @@ export function normalizeRunFileScope(value: string | null): RunFileScope { return "committed"; } -export function fabroGeneratedCommitStage(subject: string): string | null { - const match = subject.match(/^fabro\([^)]+\):\s+(.+?)\s+\([^)]+\)$/); - const stage = match?.[1]?.trim(); - return stage ? stage : null; -} - -export type RunCommitPickerOption = DiffCommitOption & { - fromSha: string | null; - toSha: string; -}; - -export function buildRunCommitOptions( - commits: Pick[], -): RunCommitPickerOption[] { - const generatedVisits = new Map(); - return commits.map((commit) => { - const stage = fabroGeneratedCommitStage(commit.subject); - let label = commit.subject || commit.short_sha; - if (stage) { - const visit = (generatedVisits.get(stage) ?? 0) + 1; - generatedVisits.set(stage, visit); - label = `${stage}@${visit}`; - } - return { - sha: commit.sha, - fromSha: commit.parents[0]?.sha ?? null, - toSha: commit.sha, - label, - title: `${commit.short_sha} ${commit.subject}`.trim(), - }; - }); -} - function useNarrowViewport(): boolean { const [narrow, setNarrow] = useState(() => { if (typeof window === "undefined") return false; diff --git a/apps/fabro-web/app/routes/run-files/commit-options.ts b/apps/fabro-web/app/routes/run-files/commit-options.ts new file mode 100644 index 000000000..3db76e89f --- /dev/null +++ b/apps/fabro-web/app/routes/run-files/commit-options.ts @@ -0,0 +1,37 @@ +import type { RunCommit } from "@qltysh/fabro-api-client"; + +export type RunCommitPickerOption = { + sha: string; + label: string; + title: string; + fromSha: string | null; + toSha: string; +}; + +export function fabroGeneratedCommitStage(subject: string): string | null { + const match = subject.match(/^fabro\([^)]+\):\s+(.+?)\s+\([^)]+\)$/); + const stage = match?.[1]?.trim(); + return stage ? stage : null; +} + +export function buildRunCommitOptions( + commits: Pick[], +): RunCommitPickerOption[] { + const generatedVisits = new Map(); + return commits.map((commit) => { + const stage = fabroGeneratedCommitStage(commit.subject); + let label = commit.subject || commit.short_sha; + if (stage) { + const visit = (generatedVisits.get(stage) ?? 0) + 1; + generatedVisits.set(stage, visit); + label = `${stage}@${visit}`; + } + return { + sha: commit.sha, + fromSha: commit.parents[0]?.sha ?? null, + toSha: commit.sha, + label, + title: `${commit.short_sha} ${commit.subject}`.trim(), + }; + }); +}