All updates
ProductionQAFrontend

Document Actions, Filter Chip Fixes, and Mail Status Display Improvements (QA Batch)

PR #355shoumikssahuSep 6, 2025 · 09:46 UTC
QASep 4, 2025
ProductionSep 6, 2025

Executive summary

This QA promotion bundles three frontend improvements: a unified, status-aware Actions menu for documents (with a working Download action), polished filter behavior with loading skeletons and stable filter-chip labels, and a cleaner read-only/edit display for mail statuses and deadlines. Together they make document management and filtering feel more consistent and responsive across the app.

Why this was needed

Document row and drawer Actions menus were built ad hoc per grid, causing missing or inconsistent options (e.g. Download was non-functional and "View Details" showed even on Uploaded documents). Applied filter chips flickered and could lose their human-readable column names while data loaded, and the Mail Status card always rendered editable controls with a separate Save button, which was confusing when simply viewing a mail.

Client / user impact

  • Users get a consistent Actions menu on document grids and drawers, with a Download action that actually triggers a download and status-transition options driven by allowed transitions.
  • "View Details" is now correctly hidden for Uploaded documents.
  • Applied-filter chips show loading skeletons and retain their proper column labels, eliminating flicker and blank/raw key names when filtering.
  • The mail detail page shows statuses and deadline as clean read-only badges/text when viewing, and editable controls only in edit mode; the inline Save button and a non-functional "Update Status" menu item were removed for now.

Technical scope

Batch promotion of three feature PRs into QA:

  • #352 – Document actions refactor: DocumentContents.tsx and DocumentGrid.tsx now build menus via shared getDocumentActions + convertActionItemsToDropdownItems, replacing per-component createDocumentActionItems. document-actions.ts adds a Download action and handleDownload, drops the unused Assign User action, and hides View Details when status is "uploaded". Grids pass a unified drawerActions callback (removing the old viewDetailsButtonOnDrawer).
  • #353 – Filter glitch + loading states: column-filter-popover.tsx adds an optional columnLabel to ColumnFilter and persists it on change; applied-filters-display.tsx and data-grid.tsx memoize/cache column labels and add isLoading skeletons; inbox-data-grid.tsx forwards isLoading.
  • #354 – Mail status display: MailStatus.tsx gains an isEditing prop, rendering global statuses as badges and deadline as formatted text when not editing; removes its internal Save mutation/button. MailOverviewDetails.tsx mounts MailStatus, and mails/[id]/page.tsx comments out the "Update Status" dropdown item.

Risk & mitigation

Low-to-moderate, UI-layer only with no API contract changes. Main risks: the document menus rely heavily on any-typed row data and per-row handler closures, so an unexpected status field could mislabel or mis-gate an action; status update for documents in DocumentContents is a TODO stub (shows an info toast). The removed inline mail Save and "Update Status" item are intentionally disabled, so status-editing flows there are temporarily unavailable. Mitigation: targeted QA on each grid's Actions menu and the mail status view/edit toggle before promoting to production.

QA validation focus

  • On document grids (batch documents and standalone), open the row Actions menu and the row drawer: confirm Download works, Delete prompts correctly, and "Move to <status>" options match allowed transitions.
  • Confirm "View Details" is hidden for Uploaded documents and present otherwise.
  • Apply, edit, and clear column filters; verify chips show skeletons while loading and always display correct column labels (no raw snake_case keys or flicker).
  • On a mail detail page, verify Mail Status shows badges + formatted deadline in view mode and editable controls in edit mode; confirm the "Update Status" dropdown item no longer appears.