Skip to content

Commit f2d6762

Browse files
committed
Add text/color mapping and hide legend when not table
1 parent 7991ad4 commit f2d6762

File tree

1 file changed

+45
-26
lines changed

1 file changed

+45
-26
lines changed

src/pages/status/migration/index.jsx

Lines changed: 45 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -52,24 +52,32 @@ export function measureProgress(details) {
5252
return { done, percentage, total };
5353
}
5454

55+
// Mapping of GitHub PR status to UI display properties
56+
const STATUS_DISPLAY_MAP = {
57+
clean: { text: "Passing", badgeClass: "success" },
58+
unstable: { text: "Failing", badgeClass: "danger" },
59+
dirty: { text: "Conflicts", badgeClass: "warning" },
60+
blocked: { text: "Blocked", badgeClass: "danger" },
61+
behind: { text: "Passing*", badgeClass: "success" },
62+
draft: { text: "Draft", badgeClass: "secondary" },
63+
has_hooks: { text: "Unknown*", badgeClass: "secondary" },
64+
unknown: { text: "Unknown", badgeClass: "secondary" },
65+
};
66+
5567
function getStatusBadgeClass(prStatus) {
56-
switch (prStatus) {
57-
case "clean":
58-
return "success";
59-
case "unstable":
60-
return "danger";
61-
case "draft":
62-
return "secondary";
63-
case "behind":
64-
case "blocked":
65-
case "dirty":
66-
return "warning";
67-
case "has_hooks":
68-
return "info";
69-
case "unknown":
70-
default:
71-
return "secondary";
68+
if (!STATUS_DISPLAY_MAP[prStatus]) {
69+
console.warn(`Unknown PR status: "${prStatus}". Expected one of: ${Object.keys(STATUS_DISPLAY_MAP).join(", ")}`);
70+
return "secondary";
7271
}
72+
return STATUS_DISPLAY_MAP[prStatus].badgeClass;
73+
}
74+
75+
function getStatusDisplayText(prStatus) {
76+
if (!STATUS_DISPLAY_MAP[prStatus]) {
77+
console.warn(`Unknown PR status: "${prStatus}". Expected one of: ${Object.keys(STATUS_DISPLAY_MAP).join(", ")}`);
78+
return prStatus;
79+
}
80+
return STATUS_DISPLAY_MAP[prStatus].text;
7381
}
7482

7583
export default function MigrationDetails() {
@@ -172,14 +180,16 @@ export default function MigrationDetails() {
172180
}
173181
</div>
174182
</div>
175-
<div className={`card margin-top--md`}>
176-
<div className="card__header">
177-
<h3>CI Status Legend</h3>
178-
</div>
179-
<div className="card__body">
180-
<CIStatusLegend />
183+
{view === "table" && (
184+
<div className={`card margin-top--md`}>
185+
<div className="card__header">
186+
<h3>CI Status Legend</h3>
187+
</div>
188+
<div className="card__body">
189+
<CIStatusLegend />
190+
</div>
181191
</div>
182-
</div>
192+
)}
183193
</main>
184194
</Layout>
185195
);
@@ -440,7 +450,7 @@ function Row({ children }) {
440450
className={`badge badge--${getStatusBadgeClass(pr_status)}`}
441451
title={CI_STATUS_DESCRIPTIONS[pr_status] || pr_status}
442452
>
443-
{pr_status}
453+
{getStatusDisplayText(pr_status)}
444454
</span>
445455
) : (
446456
<span></span>
@@ -463,11 +473,20 @@ function Row({ children }) {
463473
}
464474

465475
function CIStatusLegend() {
476+
const colorOrder = { danger: 0, success: 1, secondary: 2 };
477+
const sortedStatuses = Object.entries(CI_STATUS_DESCRIPTIONS).sort(
478+
([statusA], [statusB]) => {
479+
const classA = getStatusBadgeClass(statusA);
480+
const classB = getStatusBadgeClass(statusB);
481+
return (colorOrder[classA] ?? 3) - (colorOrder[classB] ?? 3);
482+
}
483+
);
484+
466485
return (
467486
<div className={styles.ci_status_legend}>
468-
{Object.entries(CI_STATUS_DESCRIPTIONS).map(([status, description]) => (
487+
{sortedStatuses.map(([status, description]) => (
469488
<div key={status} className={styles.ci_status_item}>
470-
<span className={`badge badge--${getStatusBadgeClass(status)}`}>{status}</span>
489+
<span className={`badge badge--${getStatusBadgeClass(status)}`}>{getStatusDisplayText(status)}</span>
471490
<span>{description}</span>
472491
</div>
473492
))}

0 commit comments

Comments
 (0)