QA Promotion: Async Bulk Mail Share/Export, Upload Center Activation, and Reliability Fixes
Executive summary
A batch promotion of recent frontend work into the QA environment, bundling 7 feature and fix PRs across the Admin and Mail apps. Highlights include background (async) processing for large mail share and export operations, the ability to activate/deactivate upload centers from the admin grid, clearer partial-failure reporting on bulk operations, and several stability fixes for pagination, file previews, and document tags.
Why this was needed
Large mail share and export actions previously assumed a synchronous response, which does not scale to high-volume selections. Admins also had no in-grid way to enable or disable an upload center, the email-reminders list paged incorrectly against the backend's contract, document-tag lookups built fragile hand-rolled URLs, and Filestack preview links could break once their signed credentials expired. This promotion moves those fixes from dev into QA for validation.
Client / user impact
- Mail users: Bulk share and bulk export of large selections now run as background jobs with live progress, instead of blocking or timing out.
- Bulk operations: When some items in a batch fail, users see normalized, readable per-item failure reasons rather than raw error blobs.
- Admins: Can activate or deactivate an upload center directly from the row menu; a deactivated center stays visible in the grid instead of vanishing.
- Stability: Email-reminder pages now load correct results, document-tag filtering hits the right URL, and document previews refresh their credentials before expiry.
Technical scope
Frontend-only (apps/admin, apps/mail, packages/types); 49 files. Notable PRs included:
- #1022 Async mail bulk export/share:
ServerExportModaland share dialogs now detect HTTP 202 + JSON job references and route them into the bulk-progress UI;ShareWithinSystemDialogsplit into view/helpers/types/hooks (recipient cards, normalizers). - #1024 Partial bulk-failure details:
BulkOperationProgressdecomposed intoBulkOperationProgressPanel+useBulkOperationProgressStatehook + types; added failure-message normalization and aSHARE_STATUS_CONFIG. - #1025 Upload center status toggle: new
useActivate/DeactivateUploadCentermutations (via the update endpoint'sis_active), permission-gated onupdate_upload_center, with optimistic cache patching so toggled rows persist. - #1023 Email reminders pagination: switched from
skipoffset to 1-basedpageandtotalPages. - #1007 Filestack credential refresh:
hasUsableFilestackCredentialsguard + expiry-based refresh; credentials fetched lazily only when files are present. - #1027 Document tags URL: replaced a manual query-string builder with the shared
http.get(route, params)helper. - #1029: hides the standalone Documents page status-update action (
showStatusUpdateActions={false}). - Refreshed generated API types and added a docs-only grid freshness/load-strategy guide (355 lines).
Risk & mitigation
Moderate. The async export/share path and the large BulkOperationProgress/ShareWithinSystemDialog refactors (hundreds of lines moved) touch high-traffic flows and depend on the backend returning 202 with the expected job_id shape; a contract mismatch would break share/export. The optimistic upload-center cache update could briefly show stale status if a toggle request fails. Mitigation: changes are isolated to the frontend, status toggles roll back the cache and toast on error, and this promotion targets QA specifically so these paths are validated before reaching Production.
QA validation focus
- Bulk share/export: Trigger a large select-all share and a large export; confirm the progress panel appears, tracks to completion, and shows per-item failures when some items fail.
- Upload centers: Activate and deactivate a center from the row menu; confirm the row stays visible, status updates, and the action is hidden for users lacking
update_upload_center. - Email reminders: Page forward/back and verify correct rows and accurate total page count.
- Document tags: Filter documents by tag/document type and confirm results load (correct request URL).
- Previews: Open a Filestack-backed preview; confirm it stays valid and refreshes near credential expiry.
- Documents page: Confirm the standalone Documents grid no longer exposes the status-update bulk action.