refactor(run-files): extract commit picker options

This commit is contained in:
Bryan Helmkamp 2026-05-09 15:33:19 -04:00
parent 010828ae7a
commit 705ea0268a
No known key found for this signature in database
3 changed files with 42 additions and 37 deletions

View file

@ -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 = [],

View file

@ -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<RunCommit, "sha" | "short_sha" | "subject" | "parents">[],
): RunCommitPickerOption[] {
const generatedVisits = new Map<string, number>();
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;

View file

@ -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<RunCommit, "sha" | "short_sha" | "subject" | "parents">[],
): RunCommitPickerOption[] {
const generatedVisits = new Map<string, number>();
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(),
};
});
}