QA Promotion (20 Feb): Real-Time Bulk Mail Progress, Select-All, Vendor Task Details & Upload Header Polish
Executive summary
This release promotes the 20 February development cycle into the QA environment for testing. It bundles a major new real-time progress experience for bulk mail operations, a Gmail-style "Select All Records" capability across data grids, a rebuilt Vendor Portal task-details view with live status updates, a more resilient document-upload header, and a batch of stability and UI fixes. Nothing here has reached Production yet; this is the testing-cycle build.
Why this was needed
Large bulk actions (status changes, folder moves) previously blocked the user behind a modal and a synchronous toast, with no visibility once the operation grew large enough for the backend to process it in the background. Users also lacked a true "select all matching records" option and had to select rows page by page. In the Vendor Portal, task progress relied on frequent polling and a thinner task view, and the document-upload header overlapped when the resizable panel was narrowed. This cycle groups the fixes addressing these gaps so they can be validated together before going live.
Client / user impact
- Bulk mail operations now show a non-blocking, Google Drive-style progress panel docked bottom-right, with live X/Y counts that update in real time and persist as the user navigates between pages.
- Users can select every matching record at once ("Select All X Records") and apply status updates, user/folder assignment, move, share, download, and read/unread in one action.
- Vendor Portal users get a richer task-details page (file list, progress bar, upload-center and batch names, durations) that updates live instead of via constant polling, plus a working "Download Original" button and server-backed "Clear Completed".
- The document-upload header no longer overlaps when the side panel is narrowed, and the reprocessing option only appears for completed documents.
Technical scope
Frontend-only promotion across the auth, mail, and vendor apps (~3,400 additions). Grounded in the diff and commits, notable changes:
- Async bulk progress (PR #795): New
BulkOperationProgresspanel plususeJobProgressSocket/useBulkJobProgresshooks and abulk-jobZustand store; detects HTTP 202, tracksjob_progress/mail_updatedevents over the/ws/notificationsWebSocket with HTTP-polling fallback, and lifts the panel intoDashboardLayoutfor route persistence.UpdateMailStatusModal/BulkUpdateStatusModalnow route 202 responses to the panel instead of a toast; progress is clamped 0-100 and usesMath.maxto stay monotonic. - Select All (PR #782): Gmail-style select-all wired into bulk actions; folder modals fixed to use the selection-aware path only when
mode === "selectAll". - Vendor task details (PRs #796, #799): Monolithic page decomposed into
TaskDetailHeader/TaskProgressBar/TaskStatsGrid/TaskInfoCards/TaskFileList, switched to a comprehensive details endpoint, WebSocket-driven updates, floating-pill pagination, Download Original, API-backed Clear Completed, and aMath.min(100, …)cap in 5 spots so extracted ZIPs never exceed 100%. - Document upload header (PR #800): Replaced
lg:viewport breakpoints with CSS@containerqueries (cq-upload-header) so layout follows panel width;container-typemoved off the sticky header. - PDF/build:
pdfjs-distnow lazy-loaded and a Turbopackcanvasstub added to avoid SSR/native-module bundling errors. - Smaller fixes:
suppressHydrationWarningon root layouts, reprocessing checkbox gated to Completed status, Add Address hidden until an entity is selected, login empty-field validation, vendor 404 page, and various debounce/UX tweaks.
Risk & mitigation
Moderate. The bulk-progress feature adds real-time WebSocket plumbing, a global store, and dual sync/async response handling, so edge cases (WebSocket drop, dismiss-while-running, cache invalidation timing) are the main risk; an HTTP-polling fallback and decoupled dismiss-vs-tracking logic mitigate this. Select-all and the vendor task rebuild touch high-traffic flows. Several changes depend on backend behavior (HTTP 202, job-event publishing, the new vendor details endpoint); if the backend is not aligned in QA, progress or task data may not populate. Mitigation: this is a QA-only promotion gated behind a full test plan before any Production release.
QA validation focus
- Trigger a bulk status update on more than one mail and confirm a 202 shows the progress panel (not a sync toast) on both Inbox and Batch Mails pages.
- Dismiss the panel mid-job and confirm background tracking continues, the grid refreshes on completion, and counts never jump backward or exceed 100%.
- Use "Select All X Records" and run status update, assign user/folders, move, and share; verify correct counts in both select-all and explicit selection modes.
- In Vendor Portal: open task details, upload files (including a ZIP), and confirm live progress capped at 100%, working pagination/filters, Download Original, and Clear Completed.
- Narrow the document-upload resizable panel and confirm the header grid reflows without overlap; verify the reprocessing checkbox appears only for Completed documents and Add Address is hidden until an entity is selected.
- Smoke-test PDF preview and confirm no hydration or canvas build warnings across Chrome, Safari, Firefox, and Edge.