All updates
QAFrontend

Document Select-All Bulk Actions, Modal Reliability Fixes, and Central-Time Date Display

PR #927pixbox-supportMar 31, 2026 · 19:19 UTC
QAMar 31, 2026

Executive summary

This QA release bundles four frontend fixes: select-all bulk actions on the Documents page now apply to every matching document (not just the visible page), a sweeping audit fixes dropdowns and form state across roughly 17 modals, client-scoped users can again run bulk reassign, and all timestamps across the app now display in US Central Time.

Why this was needed

Several usability bugs had accumulated in the admin and document workflows. Document select-all only acted on the current page, and its preview count was wrong (e.g. showing 2,463 instead of 144) because filters were missing. The Workspace Owner and other dropdowns came up empty when a modal was reopened, and some modals kept stale selections after being dismissed. Client-scoped users (without the client-selector permission) found the bulk reassign Save button permanently disabled. Finally, timestamps rendered in each viewer's local timezone, so users in other regions (e.g. India) saw times that did not match the intended US business time.

Client / user impact

  • Bulk Download (zip), Update Document Type, and Sync to PTP from a select-all selection now affect all matching documents, with accurate counts.
  • Reopened modals reliably show their dropdown options and start from a clean state, reducing confusion and accidental wrong submissions.
  • Client-scoped admins can complete bulk client/subclient reassignment again.
  • All dates and times shown across the platform are consistent (US Central Time) regardless of the viewer's location.

Technical scope

  • Documents select-all (feat. PR #926): Added ...WithSelection service + mutation variants for document update, bulk download, and PTP sync (document.services.ts, download.services.ts, ptp.services.ts). In select-all mode these send filters + excluded IDs so the backend resolves matches server-side; PTP lacks native select-all, so IDs are resolved client-side and capped at 100 docs. DocumentContents.tsx routes select-all through these paths and adds the missing document_type_id/exclude_completed filters to fix the preview count. Download and Sync-to-PTP buttons are disabled while these mutations are pending.
  • Modal state audit (feat. PR #928): Replaced useState+useEffect with useMemo for query-derived dropdown lists (client, subclient, user, label, file-naming) across ~9 modals so options no longer get wiped on re-open; wired reset logic to all close paths (Escape/backdrop/X) across ~8 modals (resolution, status, folders, document-type, cost config).
  • Client-scoped bulk reassign: Folders/BulkReassignClientSubclientModal.tsx auto-seeds tenantId from the user's scoped tenant_id when the client selector is hidden.
  • Timezone: packages/ui/src/utils/format-date.ts now wraps values in a @date-fns/tz TZDate pinned to America/Chicago, so the shared toSafeDate helper makes every downstream formatter render Central Time.

Risk & mitigation

Moderate, scoped to UI. The shared date helper change touches every timestamp app-wide, so a regression would be broadly visible; mitigated by the single-point conversion in toSafeDate. The new select-all bulk paths depend on backend support (PTP is intentionally capped at 100 docs and resolves IDs client-side). The modal refactors are behavior-preserving (derived state) but span many files. New dependency @date-fns/tz added.

QA validation focus

  • Confirm timestamps across mail, documents, and admin show US Central Time, including for non-US viewer timezones.
  • On Documents, use select-all then verify Bulk Download (zip), Update Document Type, and Sync to PTP affect all matching docs and show correct counts; confirm PTP behaves at/over the 100-doc cap.
  • Verify Download and Sync buttons disable during select-all operations (no duplicate requests).
  • Reopen Add/Edit Rule, document-type, and bulk-reassign modals: dropdowns (Workspace Owner, client, subclient) should populate every time; closing via Escape/backdrop/X should clear selections.
  • As a client-scoped user (no client-selector permission), confirm bulk reassign Save enables and completes.