diff --git a/packages/catalog-realm/pr-card/components/isolated/ci-section.gts b/packages/catalog-realm/pr-card/components/isolated/ci-section.gts index 7196b7af5f9..50d45263084 100644 --- a/packages/catalog-realm/pr-card/components/isolated/ci-section.gts +++ b/packages/catalog-realm/pr-card/components/isolated/ci-section.gts @@ -144,31 +144,41 @@ class CiStatusLabel extends GlimmerComponent { interface CiSectionSignature { Args: { ciGroups: CiGroup[]; + isLoading?: boolean; }; } export class CiSection extends GlimmerComponent { + get flatItems() { + return this.args.ciGroups.flatMap((g) => g.items); + } + } diff --git a/packages/catalog-realm/pr-card/fields/ci-status-field.gts b/packages/catalog-realm/pr-card/fields/ci-status-field.gts index 4e1392270f7..7b00a1fa533 100644 --- a/packages/catalog-realm/pr-card/fields/ci-status-field.gts +++ b/packages/catalog-realm/pr-card/fields/ci-status-field.gts @@ -85,6 +85,13 @@ export class PrCiStatusField extends FieldDef { return this.ciItems.length; } + get isLoading() { + return ( + this.checkRunEventData?.isLoading || + this.checkSuiteEventData?.isLoading + ) ?? false; + } + get ciHeadline() { if (this.ciTotalCount === 0) return null; if (this.ciFailedCount > 0) return 'Some checks were not successful'; @@ -127,6 +134,15 @@ export class PrCiStatusField extends FieldDef { {{this.ciSubtitle}} + {{else if this.isLoading}} +
+ + + +
+ Loading CI checks... +
+
{{/if}} }; diff --git a/packages/catalog-realm/pr-card/pr-card.gts b/packages/catalog-realm/pr-card/pr-card.gts index 7129a4eae74..adb72942f64 100644 --- a/packages/catalog-realm/pr-card/pr-card.gts +++ b/packages/catalog-realm/pr-card/pr-card.gts @@ -166,6 +166,13 @@ class IsolatedTemplate extends Component { return buildCiGroups(this.ciItems); } + get ciIsLoading() { + return ( + this.checkRunEventData?.isLoading || + this.checkSuiteEventData?.isLoading + ) ?? false; + } + // ── Reviews ── get latestReviewByReviewer() { return buildLatestReviewByReviewer(this.prReviewEventData?.instances ?? []); @@ -266,7 +273,7 @@ class IsolatedTemplate extends Component { {{! ── Body ── }}
- +
eventLastModified(b.event) - eventLastModified(a.event), ); @@ -231,6 +234,9 @@ export function buildCiItems( items.push(buildCiItemFromEvent(event, type)); } + // Sort alphabetically by name for stable display order across refreshes + items.sort((a, b) => a.name.localeCompare(b.name)); + return items; } diff --git a/packages/catalog-realm/submission-workflow-card/submission-workflow-card.gts b/packages/catalog-realm/submission-workflow-card/submission-workflow-card.gts index 939afd6498a..2b34275cf42 100644 --- a/packages/catalog-realm/submission-workflow-card/submission-workflow-card.gts +++ b/packages/catalog-realm/submission-workflow-card/submission-workflow-card.gts @@ -92,6 +92,7 @@ function resolveSubmissionWorkflowState( ciAllPassed: boolean, ciHasFailure: boolean, ciInProgress: boolean, + ciIsLoading: boolean, reviewState: string | null, isMerged: boolean, isClosed: boolean, @@ -119,6 +120,9 @@ function resolveSubmissionWorkflowState( if (hasPr && ciInProgress) { inProgress = true; statusDetail = 'Checks are running...'; + } else if (hasPr && ciIsLoading && !ciAllPassed && !ciHasFailure) { + inProgress = true; + statusDetail = 'Loading check status...'; } break; case 'reviewer-approve': @@ -416,6 +420,13 @@ export class SubmissionWorkflowCard extends CardDef { return this.ciItems.some((i) => i.state === 'in_progress'); } + get ciIsLoading() { + return ( + this.checkRunEventData?.isLoading || + this.checkSuiteEventData?.isLoading + ) ?? false; + } + // ── Review state ── get latestReviewByReviewer() { return buildLatestReviewByReviewer( @@ -436,6 +447,7 @@ export class SubmissionWorkflowCard extends CardDef { this.ciAllPassed, this.ciHasFailure, this.ciInProgress, + this.ciIsLoading, this.reviewState, this.isMerged, this.isClosed, @@ -491,7 +503,7 @@ export class SubmissionWorkflowCard extends CardDef { {{! ── Step tracker ── }}
- {{#each this.workflowState.steps as |step idx|}} + {{#each this.workflowState.steps key="key" as |step idx|}}
{{#if (eq step.status 'completed')}} @@ -611,7 +623,7 @@ export class SubmissionWorkflowCard extends CardDef { {{! Step summary }}
Steps
- {{#each this.workflowState.steps as |step|}} + {{#each this.workflowState.steps key="key" as |step|}}
{{#if (eq step.status 'completed')}}