OPERATOR

BulkResults

Usage

Inspection results

Selected IDs · 3 requested · 1 succeeded · 1 not reported

Source
equipment · r7
Filters
West site
EquipmentOutcomeDetailsActions
Cooling pump AlphaEQ-1succeeded—
Ventilation fan BravoEQ-2failedThe application reported an unavailable record.
EQ-3Not reported—

The third equipment ID stays Not reported until the application supplies its result.

<BulkResults
  label="Inspection results"
  selection={originalSelectionSnapshot}
  items={suppliedResults}
  pendingRetryIds={pendingIds}
  onRetryRequest={reviewRetry}
/>

Complete result coverage

The named semantic table retains the original snapshot order and stable equipment IDs. Each BulkItemResult contains id, label, state, optional message, and optional retryable. States are queued, running, succeeded, failed, canceled, and skipped.

Source and Filters appear above the table using DescriptionList's shared details layout. These rows retain the original request's context, with muted labels and right-aligned, wrapping values.

Missing snapshot IDs appear as Not reported. Only explicit succeeded results count as successes. Skipped, canceled, running, queued, and missing outcomes never become successful by inference. The table does not derive a job lifecycle state; supply that separately to JobStatus.

A request with more than 100 IDs is shown a page at a time, in selection order, with the PREVIOUS PAGE and NEXT PAGE controls DataGrid uses; set pageSize to choose the page length. The summary above the table always counts every requested ID.

When the four columns cannot fit at a readable width, the table scrolls sideways inside its own box, and the page never widens. While it scrolls, the box is a keyboard tab stop named after the label ("Inspection results scroll viewport"). Names, IDs and messages wrap inside their cells.

Duplicate or unknown result IDs, invalid states, or malformed labels/messages produce a visible error. Outcomes are withheld until that coverage is corrected, while the original requested IDs remain visible as Not reported. Invalid selection IDs block result interpretation. Pending retry IDs must also be known and unique.

Explicit retries

Retry appears only when a failed item explicitly supplies retryable: true and the application supplies onRetryRequest. The callback receives that item's exact ID and leaves its supplied outcome unchanged. pendingRetryIds disables outstanding retry actions; disabled blocks all actions without hiding results.

The application reviews retries, rechecks current authority, creates a fresh request, and excludes prior successes. A request callback or resolved promise never proves a successful retry.

Props

PROPTYPEDEFAULTREQUIRED
labelstring—yes
selection

BulkSelectionSnapshot for the exact original request. IDs must be unique and nonempty.

node—yes
items

BulkItemResult[]: {id,label,state:'queued'|'running'|'succeeded'|'failed'|'canceled'|'skipped',message?,retryable?}. Only snapshot IDs are accepted, once each.

array—yes
pendingRetryIds

Known unique IDs with a supplied pending retry request. Their actions remain disabled and previous results remain visible.

array—no
onRetryRequest

(id) => void. Offered only for explicitly retryable failed items. Calling it does not change supplied outcomes.

function—no
disabledbooleanfalseno
pageSize

Rows per page. A request with more IDs than this is shown a page at a time, in selection order, with PREVIOUS PAGE and NEXT PAGE; the summary still counts every ID. Invalid or less-than-one values use 100; fractional values round down.

number100no
headingLevel

Label heading level: 2, 3, 4, 5, or 6. Choose it for the hosting surface's heading hierarchy.

number3no
classNamestring—no

Accessibility

  • The table is named, with equipment row headers and readable text statuses. Choose headingLevel (2–6, default 3) to fit the label into the hosting surface's heading outline.
  • Source and filter metadata use native description-list relationships.
  • The forwarded HTMLDivElement ref targets the named, focusable result region.
  • When a focused Retry becomes pending, or a supplied result removes it, focus moves to that row's equipment name (to the row now in its place if the row is gone, else to the result region), and only if it would otherwise be lost. A newly pending retry is announced: "Retry request pending for Ventilation fan Bravo. Awaiting an application update."
  • Retry controls retain keyboard activation, visible focus, disabled semantics, and 24px targets.

Manifest entry

<BulkResults label="Inspection results" selection={snapshot} items={results} pendingRetryIds={pendingIds} onRetryRequest={reviewRetry} />
View agent manifest
{
  "description": "Named per-equipment result table in selection order. Missing IDs remain Not reported; malformed result coverage is visible and never counted as success.",
  "props": {
    "label": {
      "type": "string",
      "required": true
    },
    "selection": {
      "type": "node",
      "required": true,
      "description": "BulkSelectionSnapshot for the exact original request. IDs must be unique and nonempty."
    },
    "items": {
      "type": "array",
      "required": true,
      "description": "BulkItemResult[]: {id,label,state:'queued'|'running'|'succeeded'|'failed'|'canceled'|'skipped',message?,retryable?}. Only snapshot IDs are accepted, once each."
    },
    "pendingRetryIds": {
      "type": "array",
      "description": "Known unique IDs with a supplied pending retry request. Their actions remain disabled and previous results remain visible."
    },
    "onRetryRequest": {
      "type": "function",
      "description": "(id) => void. Offered only for explicitly retryable failed items. Calling it does not change supplied outcomes."
    },
    "disabled": {
      "type": "boolean",
      "default": false
    },
    "pageSize": {
      "type": "number",
      "default": 100,
      "description": "Rows per page. A request with more IDs than this is shown a page at a time, in selection order, with PREVIOUS PAGE and NEXT PAGE; the summary still counts every ID. Invalid or less-than-one values use 100; fractional values round down."
    },
    "headingLevel": {
      "type": "number",
      "default": 3,
      "description": "Label heading level: 2, 3, 4, 5, or 6. Choose it for the hosting surface's heading hierarchy."
    },
    "className": {
      "type": "string"
    }
  },
  "composable_with": [
    "JobStatus",
    "BulkActionBar",
    "Badge",
    "Button",
    "DescriptionList"
  ],
  "never_inside": [
    "Button"
  ],
  "example": "<BulkResults label=\"Inspection results\" selection={snapshot} items={results} pendingRetryIds={pendingIds} onRetryRequest={reviewRetry} />"
}

On this page