QA Release: Async Batch-Upload Progress, Permanent Rule Deletion, and Admin/Document Polish
Executive summary
This QA promotion ships a focused set of mail, admin, and vendor improvements. The headline change is a non-blocking, Google Drive-style progress panel for batch file uploads (the upload now runs in the background and shows live progress instead of freezing the screen). It also converts admin/mail rule deletion from a reversible "deactivate" into a permanent delete, renames the admin "Settings" area to "Administration," and aligns the activity-log API to the backend's new numeric module identifiers.
Why this was needed
Large batch uploads previously blocked the UI until the server finished, and rule "deletion" only deactivated rules rather than removing them, which did not match user expectations or the backend's new force-delete contract. Separately, the backend changed the activity-log endpoint to use numeric module IDs (1=Batches, 2=Mails, 3=Documents) instead of entity-type strings, and the admin "Settings" label collided with the shared personalization Settings panel. The document-details header also pushed action buttons off-screen on narrow displays.
Client / user impact
- Batch uploads no longer freeze the screen; users get a dockable, real-time progress clip and can keep working while files process.
- Deleting a rule (single or bulk) now permanently removes it and cannot be undone; system/global rules can be deleted via a force flag, and system rules can no longer be activated/deactivated.
- Admin navigation now reads "Administration" instead of "Settings."
- Mail and document activity logs load correctly against the new backend contract.
- Document details header, tabs, and the Sync-to-PTP button stay usable on small/mobile screens; assigning a folder from a single row now correctly shows "1 mail."
Technical scope
Frontend monorepo (apps: mail, admin, vendor), 42 files, ~683/-303 lines. Note: the PR description references a much larger accumulated changelog, but the actual diff against qa is the focused set below.
- Async batch upload tracking (new):
BulkOperationProgressrefactored into a dual-mode panel — mail mode (WebSocket + 1.5s polling fallback) and new batch mode (polling-only viaGET ../vendor/api/files/upload-task/{taskId}). AddsuseBatchTaskPollingquery,BatchTaskStatus/BatchUploadAcceptedResponse/BatchTaskStatusResponsetypes,BATCH_STATUS_CONFIG,startBatchTaskinbulk-job.store, andhandleBatchMutationResponse/onBatchTaskCompleteinuseBulkJobProgress.AddBatchModaldetects HTTP 202 and defers cache invalidation. - Rule deletion behavior change: single + bulk delete now send
permanent: true, force: true; UI copy changed from Deactivate to Delete with "cannot be undone" warnings; activate/deactivate menu item hidden for system rules;bulkUpdateRulesswitched POST→PUT. - Activity-log API alignment: mail/document routes now use numeric
moduleId;ActivityLogCreateRequest.module_entity_type(string) →module_id(number); droppedmodule_entity_typefrom activity-log types. - Admin:
settingsroute/page renamed toadministration(nav, breadcrumbs, sidebar spacing); system-folder tooltip wording clarified. - Responsive/UI fixes: document-details header + tabs compacted for small screens,
CommentsTriggerButtongainshideLabel, header name truncation reduced to 30 chars; In Progress documents tab no longer sendsstatus_idalongsideexclude_completed; single-row Assign-Folder primesselectedMailIds. - Misc: department update payload keys aligned to backend (
name/description); vendor Filestack pickeroverflow: visibleoverrides removed;address.servicesdelete query param revertedtenant_id→entity_id.
Risk & mitigation
Medium. The rule-delete change is destructive and irreversible — there is a real risk if users expected the old reversible behavior, mitigated by explicit "cannot be undone" confirmation dialogs. The batch-progress feature depends on the vendor upload-task endpoint returning the unwrapped task object and a valid task_details.id on 202; a contract mismatch would leave the panel indeterminate (mitigated by terminal-status handling and a retry limit). The activity-log module-ID switch will break log loading if frontend IDs drift from the backend's MODULE_ID_DISPLAY_NAME map. Most other changes are low-risk UI/label adjustments.
QA validation focus
- Upload a large batch and confirm the screen stays interactive, the progress clip appears bottom-right, advances, and shows the correct file counts and terminal state (completed/failed/partial).
- Confirm a synchronous (small) batch upload still shows the success toast and refreshes the grid.
- Delete a single rule and bulk-delete rules: verify they are permanently removed, the confirmation says "cannot be undone," and system/global rules delete successfully.
- Confirm system rules no longer show an Activate/Deactivate option.
- Open Mail and Document activity logs and verify entries load (numeric module IDs).
- Verify admin nav, breadcrumb, and page title read "Administration"; check system-folder tooltip wording.
- On a narrow/mobile viewport, confirm document-details header, tabs scroll, and Sync-to-PTP button remain visible.
- Trigger Assign-to-Folder from a single inbox row and confirm the modal reports "1 mail."
- Verify the In Progress documents tab returns results; edit a department and confirm changes persist.
- In the vendor portal, open the Filestack upload picker and confirm it fits within the modal without overflow.