All updates
ProductionQAFrontend

QA Release: Consistent Date Formatting, Faster Detail Pages, and Polish Fixes

PR #393shoumikssahuSep 11, 2025 · 22:08 UTC
QASep 11, 2025
ProductionSep 11, 2025

Executive summary

This release promotes a batch of frontend improvements to the QA environment. It standardizes how dates appear across every data grid, speeds up the Mail and Document detail pages by loading tab content only when opened, and includes several smaller fixes around browser tab titles, loading placeholders, and a stray empty tag in document details.

Why this was needed

Date columns across the app were inconsistent: some grids showed only a date, others a localized date/time, and a few rendered timestamps in red, which looked like an error state. Separately, detail pages eagerly loaded every tab (Overview, Documents, Activity, Resolution) on first open, firing all of their data requests up front and slowing the initial load. Browser tabs also showed a single generic title for every page, making it hard to tell pages apart.

Client / user impact

  • Created and updated dates now read uniformly as MM/DD/YYYY hh:mm:ss AM/PM in Admin Hub (Document Types, Folders, Organizations), Batch contents, and Inbox/Mail grids.
  • Mail and Document detail pages open faster: heavy tab panels and the PDF viewer now load on demand, so a tab's data is only fetched when the user actually opens it.
  • Browser tabs now show page-specific titles (e.g. "Document Mail System — Documents", "— Mails", "— Inbox") and an updated favicon, making navigation and bookmarking clearer.
  • A stray empty tag/badge in Document Details no longer appears when a document has no name.

Technical scope

Batch promotion of the following feature PRs from dev to qa:

  • DA-93 (#384): New formatDateTimeConsistent helper in src/utils/utils.ts using date-fns (MM/dd/yyyy hh:mm:ss a) with null/invalid-date guards; wired into grid column renderers (Document Types, Folders, Organization, Batch/Mail contents, Inbox/Mail) replacing ad-hoc toLocaleDateString(); red date styling removed.
  • DA-87 (#392): Mail and Document detail pages convert MailDocuments, MailActivity, ToBeResolved, DocumentMetaDetails, DocumentActivity, and the PDF viewer to next/dynamic imports and drop forceMount on TabsContent so inactive tabs stay unmounted and defer their queries.
  • #389: Root metadata switched to a title template plus per-section layout.tsx files (Admin Hub, Documents, Mails, Inbox, Batches, Resolution Center, Dashboard); favicon updated; unused logo placeholder asset removed.
  • DA-81 (#390): Trailing slashes stripped from API route path constants across src/routes/* (e.g. /v1/auth/login/ to /v1/auth/login).
  • DA-96 (#387): Skeleton loading-placeholder classes normalized for visual consistency.
  • DA-60 (#388): Sync-to-PTP button rendering logic in MailDocuments simplified.
  • DA-84 (#391): Document Details badge now renders only when document.document_name exists, fixing an empty chip. Net ~1.8k additions / 1.4k deletions, largely formatting churn.

Risk & mitigation

Low-to-moderate, concentrated in two areas. (1) Stripping trailing slashes from API routes could break calls if the backend strictly requires the trailing slash on any endpoint; this is broad (most route files touched) and should be exercised against the QA API. (2) Removing forceMount changes tab lifecycle: switching away from a tab now unmounts it and resets in-tab state, and revisiting refetches. Mitigation: the date helper and chip fix are defensive (null guards), and detail-page behavior is verifiable per tab; rollback is re-adding forceMount and reverting dynamic imports.

QA validation focus

  • Verify date columns show MM/DD/YYYY hh:mm:ss AM/PM consistently (no red text, no raw ISO) across Admin Hub grids, Batch contents, and Inbox/Mail grids; confirm empty/invalid dates show -.
  • On Mail and Document detail pages, confirm each tab (Overview/Details, Documents, Activity, Resolution) loads its data only when opened (watch network calls) and renders correctly after switching back and forth.
  • Smoke-test core API-backed flows (login, permissions, grids, batches, mail/document details) to confirm the trailing-slash route changes did not break any request.
  • Confirm browser tab titles reflect the section and the favicon renders; confirm no empty badge appears on documents without a name.
  • Spot-check loading skeletons render cleanly where data is fetching.