QA Release: Consistent Date Formatting, Faster Detail Pages, and Polish Fixes
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/PMin 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
formatDateTimeConsistenthelper insrc/utils/utils.tsusingdate-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-hoctoLocaleDateString(); red date styling removed. - DA-87 (#392): Mail and Document detail pages convert
MailDocuments,MailActivity,ToBeResolved,DocumentMetaDetails,DocumentActivity, and the PDF viewer tonext/dynamicimports and dropforceMountonTabsContentso inactive tabs stay unmounted and defer their queries. - #389: Root
metadataswitched to a title template plus per-sectionlayout.tsxfiles (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
MailDocumentssimplified. - DA-84 (#391): Document Details badge now renders only when
document.document_nameexists, 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/PMconsistently (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.