OPERATOR

ActionStatus

Supplied lifecycle

Refresh request
submitted

Awaiting authoritative receipt.

Refresh request
accepted

Accepted; execution has not completed.

Refresh request
in-progress

Execution is in progress.

Refresh request
complete

Completion was reported by the application.

Refresh request
rejected

Authorization denied by the application.

Refresh request
partial

Some sources did not complete.

Refresh request
failed

The application reported failure.

Refresh request
timeout

Outcome unknown. Reconcile before retrying.

state is required and must come from an authoritative application result. This component never advances a lifecycle, starts a timer, fabricates progress, or equates a callback return with success. A timeout means the outcome may still be unknown; it does not prove remote execution stopped.

Job displays can also supply queued, running, cancel-requested, and canceled. Cancellation requested is still an active outcome: work may finish before cancellation takes effect. Only a supplied canceled result establishes that outcome. Use JobStatus when the display also needs validated item progress and separate pending-request feedback.

Supported recovery

Pass onRetry and/or onCancel only when the application supports those actions. Recovery appears only for supplied callbacks and never changes the displayed state itself. Use disabled when permissions or context block an otherwise supported recovery, and show the reason next to the component. The application owns idempotency, confirmation, transport, authorization, cancellation semantics, and reconciliation after timeout.

<ActionStatus
  state={result.state}
  label="Refresh source"
  message={result.message}
  requestId={result.requestId}
  onRetry={result.retrySupported ? requestRetry : undefined}
  onCancel={result.cancelSupported ? requestCancel : undefined}
  disabled={!authorized}
/>

Props

PROPTYPEDEFAULTREQUIRED
state

Authoritative application-supplied lifecycle state. Timeout does not imply rejection or completion. A cancel request does not establish cancellation; a supplied complete result can still follow cancel-requested.

enum
submitted | accepted | rejected | in-progress | complete | partial | failed | timeout | queued | running | cancel-requested | canceled
—yes
labelstring—yes
messagestring—no
requestIdstring—no
onRetry

Render Retry only when retry is supported. Does not change state.

function—no
onCancel

Render Cancel only when cancellation is supported. Does not change state.

function—no
retryLabelstring"Retry"no
cancelLabelstring"Cancel"no
disabled

Disables recovery actions without hiding supplied outcomes.

booleanfalseno

Accessibility

  • A polite atomic status region announces supplied changes.
  • Status labels and indicators pair with semantic color.
  • Recovery uses native buttons with visible focus and disabled semantics.
  • When the focused recovery is withdrawn (the application stops supplying onRetry, say once the request is accepted) or disabled, focus moves to the result instead of the page. The result is a group named by label, so a screen reader says where focus went. Focus that has already moved elsewhere is left where it is.
  • The label, request ID and message wrap, and a long identifier breaks instead of running out of the block.

Manifest entry

<ActionStatus state={result.state} label="Refresh source" message={result.message} requestId={result.id} onRetry={canRetry ? retry : undefined} />
View agent manifest
{
  "description": "Stateless authoritative action outcome display with optional application-supported recovery callbacks. When the focused recovery is withdrawn or disabled, focus moves to the result, a group named by its label. Long text wraps.",
  "props": {
    "state": {
      "type": "enum",
      "values": [
        "submitted",
        "accepted",
        "rejected",
        "in-progress",
        "complete",
        "partial",
        "failed",
        "timeout",
        "queued",
        "running",
        "cancel-requested",
        "canceled"
      ],
      "required": true,
      "description": "Authoritative application-supplied lifecycle state. Timeout does not imply rejection or completion. A cancel request does not establish cancellation; a supplied complete result can still follow cancel-requested."
    },
    "label": {
      "type": "string",
      "required": true
    },
    "message": {
      "type": "string"
    },
    "requestId": {
      "type": "string"
    },
    "onRetry": {
      "type": "function",
      "description": "Render Retry only when retry is supported. Does not change state."
    },
    "onCancel": {
      "type": "function",
      "description": "Render Cancel only when cancellation is supported. Does not change state."
    },
    "retryLabel": {
      "type": "string",
      "default": "Retry"
    },
    "cancelLabel": {
      "type": "string",
      "default": "Cancel"
    },
    "disabled": {
      "type": "boolean",
      "default": false,
      "description": "Disables recovery actions without hiding supplied outcomes."
    }
  },
  "composable_with": [
    "Inspector",
    "Alert",
    "AppShell"
  ],
  "never_inside": [
    "Button"
  ],
  "example": "<ActionStatus state={result.state} label=\"Refresh source\" message={result.message} requestId={result.id} onRetry={canRetry ? retry : undefined} />"
}

On this page