A React component that renders an individual approval request card in two variants — `admin` (technician-facing, shows raw command + structured fields) and `client` (Fae end-user-facing, shows only the human-readable explanation). Both variants switch between a pending state with Approve/Reject actions and a resolved state with a status tag. ## Key Components | Export / Symbol | Description | |---|---| | `ApprovalRequestMessage` | Primary `forwardRef` component — the main export | | `ApprovalCardBody` | Internal shared body (command block + fields/explanation) rendered for the `admin` variant | | `ApprovalFieldList` | Internal `
`-based renderer for structured `label/value` field pairs | **Props (`ApprovalRequestMessageProps`):** | Prop | Type | Default | Description | |---|---|---|---| | `data` | `ApprovalRequestData` | — | Command, fields, explanation, requestId | | `status` | `'pending' \| 'approved' \| 'rejected' \| 'cancelled'` | `'pending'` | Controls action vs. resolved UI | | `variant` | `'admin' \| 'client'` | `'admin'` | Switches between technician and end-user layout | | `onApprove` | `(requestId) => Promise` | — | Callback fired on Approve click | | `onReject` | `(requestId) => Promise` | — | Callback fired on Reject click | | `resolvedByName` | `string` | — | Name shown in resolved status tag (client variant) | | `assistantType` | `string` | — | Accepted for prop parity with batch card; unused internally | ## Usage Example ```typescript import { ApprovalRequestMessage } from "./approval-request-message" // Admin (technician) view — shows command block and structured fields await approveRequest(id)} onReject={async (id) => await rejectRequest(id)} /> // Client (Fae end-user) view — shows explanation only ```