@@ -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+
5567function 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
7583export 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
465475function 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