✅ Done — shipped in objectui#2710 (aefcf39) + framework#3332 (e412fb6).
The approvals inbox drawer now renders every decision — approve, reject, reassign, send-back, request-info, remind, recall, resubmit — purely through DeclaredActionsBar, with zero hand-wired action UI. Approve/reject collect a comment and file attachments through the generic declared-action dialog (the declared type:'file' param renders the shared upload widget; serializeParamValues maps the value to attachments: string[]). The hand-written composer, doAction, the upload handlers, the quick-phrase chips, and the admin actorOverride escape hatch are gone (~240 lines net removed from the inbox).
Browser-verified end-to-end: no composer, approve/reject render in the bar, the Approve dialog shows a file-upload widget, and staging a file + confirming POSTs {comment, attachments:["<fileId>"]}.
Original plan retained below for reference.
Goal
The approvals inbox drawer renders decisions purely through DeclaredActionsBar — zero hand-written action UI, including approve/reject and their attachments.
Delivered across:
- objectui#2710 —
FileField surfaces file_id; ActionParamDialog serializes upload params to file_id(s); composer retired.
- framework#3332 — declared optional multi-file
attachments param on approval_approve/approval_reject.
Refs
#2700 / #2704 / #2707 · objectui#2697 · framework#3300 · framework#3268 / #3274 · #2678 (P2-4) · cloud#861
✅ Done — shipped in objectui#2710 (
aefcf39) + framework#3332 (e412fb6).The approvals inbox drawer now renders every decision — approve, reject, reassign, send-back, request-info, remind, recall, resubmit — purely through
DeclaredActionsBar, with zero hand-wired action UI. Approve/reject collect a comment and file attachments through the generic declared-action dialog (the declaredtype:'file'param renders the shared upload widget;serializeParamValuesmaps the value toattachments: string[]). The hand-written composer,doAction, the upload handlers, the quick-phrase chips, and the adminactorOverrideescape hatch are gone (~240 lines net removed from the inbox).Browser-verified end-to-end: no composer, approve/reject render in the bar, the Approve dialog shows a file-upload widget, and staging a file + confirming POSTs
{comment, attachments:["<fileId>"]}.Original plan retained below for reference.
Goal
The approvals inbox drawer renders decisions purely through
DeclaredActionsBar— zero hand-written action UI, including approve/reject and their attachments.Delivered across:
FileFieldsurfacesfile_id;ActionParamDialogserializes upload params tofile_id(s); composer retired.attachmentsparam onapproval_approve/approval_reject.Refs
#2700 / #2704 / #2707 · objectui#2697 · framework#3300 · framework#3268 / #3274 · #2678 (P2-4) · cloud#861