feat(approvals): real work-item queue + active-step actions wired to EA2
New Approvals scene at landing chip + scene route. Pulls live work items from /api/ea2/work-items?view=all and renders: - Status counter (running/waiting/blocked) - Hub filter (chip row, dynamic from response) - Queue list (display_name + age + active step + hub + requester) - Selected case detail: active step, dispatch kind, form fields, available actions Clicking an action POSTs to /api/runtime/transactions/<id>/actions/<id> with the signed-in user as actor and refreshes both the transaction and the queue. This proves runtime EA2 writes are working end-to-end beyond just the wizard.
This commit is contained in:
@@ -2026,3 +2026,39 @@ select.studio-input { background: var(--bp-paper); }
|
||||
width: 6px; height: 6px; border-radius: 50%;
|
||||
background: var(--bp-amber);
|
||||
}
|
||||
|
||||
.approvals-scene { padding: 24px; max-width: 1400px; margin: 0 auto; background: var(--bp-paper); min-height: calc(100vh - 60px); }
|
||||
.approvals-head { margin-bottom: 20px; max-width: 880px; }
|
||||
.approvals-intro { font-size: 13px; color: var(--bp-muted); line-height: 1.5; margin-top: 6px; }
|
||||
.approvals-stats { display: flex; gap: 8px; margin-top: 12px; flex-wrap: wrap; }
|
||||
.approvals-stat { font-family: var(--bp-mono); font-size: 11px; padding: 4px 10px; border: 1px solid var(--bp-navy); }
|
||||
.approvals-stat-running { background: color-mix(in srgb, var(--bp-amber) 25%, var(--bp-paper)); }
|
||||
.approvals-stat-waiting { color: var(--bp-muted); }
|
||||
.approvals-stat-blocked { background: color-mix(in srgb, #c25555 20%, var(--bp-paper)); }
|
||||
.approvals-filter-row { display: flex; gap: 6px; margin-top: 12px; flex-wrap: wrap; }
|
||||
.approvals-split { display: grid; grid-template-columns: 1.4fr 1fr; gap: 16px; }
|
||||
.approvals-queue, .approvals-detail { border: 1px solid var(--bp-navy); padding: 16px; background: var(--bp-paper); display: flex; flex-direction: column; gap: 10px; }
|
||||
.approvals-list { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 4px; max-height: 70vh; overflow-y: auto; }
|
||||
.approvals-row { width: 100%; text-align: left; padding: 10px 12px; background: var(--bp-paper); border: 1px solid color-mix(in srgb, var(--bp-navy) 18%, transparent); color: var(--bp-navy); cursor: pointer; display: flex; flex-direction: column; gap: 4px; }
|
||||
.approvals-row:hover { background: color-mix(in srgb, var(--bp-amber) 12%, var(--bp-paper)); }
|
||||
.approvals-row.active { background: color-mix(in srgb, var(--bp-amber) 28%, var(--bp-paper)); border-color: var(--bp-navy); }
|
||||
.approvals-row-head { display: flex; justify-content: space-between; align-items: baseline; gap: 8px; }
|
||||
.approvals-row-title { font-size: 13px; font-weight: 700; }
|
||||
.approvals-row-age { font-family: var(--bp-mono); font-size: 10px; color: var(--bp-muted); flex-shrink: 0; }
|
||||
.approvals-row-meta { display: flex; gap: 8px; flex-wrap: wrap; font-family: var(--bp-mono); font-size: 10px; color: var(--bp-muted); }
|
||||
.approvals-row-step { color: var(--bp-navy); }
|
||||
.approvals-row-hub { padding: 1px 6px; border: 1px solid color-mix(in srgb, var(--bp-navy) 30%, transparent); }
|
||||
.approvals-card { padding: 14px; background: var(--bp-paper); border: 1px solid var(--bp-navy); display: flex; flex-direction: column; gap: 10px; }
|
||||
.approvals-card-title { font-size: 14px; font-weight: 700; color: var(--bp-navy); display: flex; align-items: center; gap: 6px; }
|
||||
.approvals-card-meta { font-family: var(--bp-mono); font-size: 11px; color: var(--bp-muted); }
|
||||
.approvals-fields { padding: 8px 0; border-top: 1px solid color-mix(in srgb, var(--bp-navy) 20%, transparent); }
|
||||
.approvals-fields-label { font-family: var(--bp-mono); font-size: 10px; letter-spacing: 0.08em; color: var(--bp-muted); margin-bottom: 4px; }
|
||||
.approvals-fields ul { list-style: none; padding: 0; margin: 0; font-size: 12px; }
|
||||
.approvals-fields li { padding: 3px 0; }
|
||||
.approvals-field-type { font-family: var(--bp-mono); font-size: 10px; color: var(--bp-muted); }
|
||||
.approvals-actions { display: flex; gap: 8px; flex-wrap: wrap; padding-top: 8px; border-top: 1px solid color-mix(in srgb, var(--bp-navy) 20%, transparent); }
|
||||
|
||||
@media (max-width: 900px) {
|
||||
.approvals-split { grid-template-columns: 1fr; }
|
||||
.approvals-list { max-height: 50vh; }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user