All updates
ProductionQAFrontend

Bulk Download Reliability Fix Plus Bulk-Action and Status-Filter UI Polish (QA)

PR #546pixbox-supportOct 10, 2025 · 18:45 UTC
QAOct 10, 2025
ProductionOct 10, 2025

Executive summary

This QA build fixes bulk (zip) downloads so files are still included when only a Filestack URL is available, and adds two UI refinements: destructive actions in the bulk-actions overflow menu now keep their high-contrast warning style, and status filter chips on document grids have more consistent spacing. The headline fix originated as feature PR #545.

Why this was needed

Previously, bulk download only collected files that had an S3 presigned URL and a status of exactly completed. Items that were downloadable via their Filestack URL (or had a non-completed status while still having a valid URL) were silently dropped, so users could get an incomplete zip or a 'No valid files to download' error even when files were actually available. Separately, destructive buttons (e.g. Delete) lost their warning styling once moved into the overflow menu, and status filter chips used inconsistent per-chip margins.

Client / user impact

Users running bulk downloads from mail, document, or batch grids will now receive all retrievable files in the zip, including those served only via Filestack, reducing missing-file complaints. Destructive bulk actions in the overflow menu remain visually distinct (red/high-contrast), lowering the chance of accidental clicks, and status filter chips line up more cleanly with surrounding content.

Technical scope

  • Bulk download URL handling (src/tanstack/mutations/download.mutations.ts, src/services/download.services.ts): the filter now keeps any download that has either a filestack_url or s3_presigned_url and is not in the failed status (previously required completed + S3 URL only). Per item, it prefers filestack_url, falling back to s3_presigned_url, and skips entries with no usable URL.
  • New constants file (src/constants/downloads.constants.ts): introduces BULK_DOWNLOAD_STATUSES (completed/failed/pending/duplicate) and a derived BulkDownloadStatus type; the BulkDownloadItem interface now allows filestack_url/s3_presigned_url to be null.
  • Bulk actions overflow menu (src/components/common/bulk-actions.tsx): detects variant === "destructive" children and applies a dedicated destructive style class instead of flattening them to neutral menu styling.
  • Status filter chips (src/components/batches/DocumentStatusFilter.tsx): replaces per-chip mx-1 margins with a shared ml-4 mb-3 flex flex-wrap gap-2 container class for parent and sub-status chip rows.
  • Several functions/hooks gained explanatory doc comments; no behavioral change from those.

Risk & mitigation

Low risk; the change is scoped to the client-side bulk-download zip builder and two presentational tweaks. The main behavioral risk is preferring filestack_url over s3_presigned_url: if a Filestack URL is stale or returns an error, that file's fetch may fail (handled per-file as a rejected promise). Mitigation: verify both URL sources resolve in QA, and confirm previously-excluded statuses (pending/duplicate) with valid URLs are genuinely downloadable. UI changes carry only visual-regression risk.

QA validation focus

  • Bulk-download a mixed selection from mail, document, and batch grids and confirm the zip contains all expected files, including items that only have a Filestack URL.
  • Confirm failed items are excluded and that a selection with no usable URLs still shows 'No valid files to download'.
  • Verify items with pending/duplicate status but a valid URL are now included as intended.
  • In the bulk-actions overflow menu, confirm destructive actions (e.g. Delete) render in the red/high-contrast style and behave correctly.
  • Visually check parent and sub-status filter chip alignment and wrapping on document grids.