feat(frontend): Razor/Next UI parity (#789, #790-#797) - #820
Conversation
Share settings nav/access helpers between layout and page so SSR loads only endpoints for visible tabs. Users without role or site-settings permissions no longer trigger a 403 fan-out on page load, and users with no settings access see an empty state instead of defaulting to the hidden roles tab.
Parent: #789. Delivers Next.js and Razor alignment for report detail/list/edit, homepage Stars, profile analytics resilience, user default tab, and Razor fixes for search (q alias), groups list, and reports list without id. Includes component and server-action tests; frontend Vitest and typecheck pass.
There was a problem hiding this comment.
Reviewed against parent #789 and children #790–#797. CI is green.
The parity slice itself looks complete enough to close those issues:
- #790 — Report detail has section nav plus Description, Terms, Details, Query, Relationships, Maintenance, images, and a past-due banner. Details table covers exec visibility, hyperspace, fragility tags, orphaned, and owners.
- #791 / #795 —
/reportsand/groupswithoutidare list views on Next and Razor instead of 500 / not-found. - #792 — Edit is a Cancel / Description / Meta / Images / Maintenance / Complete wizard; seeded description fields load; meta lookups and maintenance log are in the form.
- #793 — Folder / type / text filters, Shared With Me rail, and gold collection cards (
has-shadow-goldon Razor collections). - #794 — Razor
?q=aliasesQuery, with tests. - #796 — Other-user profiles default to Report Runs, with a rendered
UserPageTabstest. - #797 — Bar labels prefer
key, percents format as33%, term/collection loads keep a shell instead of a generic error.
P2 — not blocking #790–#797, but please handle before merge:
-
This branch also contains a rebased copy of #808 (
feat(settings): complete #802…andfix(settings): fetch only permission-visible panels #802). Those commits are not the same SHAs as #808. Merging both PRs will conflict. Either drop the settings commits here and rebase ontodevafter #808, or close #808 as superseded by this PR. -
#796 overlaps open PR 804 (same default-tab change + test). Coordinate so only one lands.
-
#797DoD asked for term and collection load-failure coverage;loadProfileAnalyticsActiontests only the term path. Collection uses the same branch, so add a matching case. -
Razor
/reportsand/groupslist paths have no function tests (searchqdoes). Worth a 500-regression test on the missing-id path.
This does not close #801 (/users/settings is still rewritten in next.config.ts).
Summary
Closes the #789 Razor vs Next.js UI parity track via child issues #790–#797.
Child Issues
/reportswithout ID: Paginated report list, API type column fix, and Razor reports list view. Prevents a 500 error when accessing bare/reports.?q=as an alias for Query, with tests./groupswithout ID: Adds the groups list view.UserPageTabstest.loadProfileAnalyticsActiontests.Test Plan
pnpm frontend:test— 143 tests passpnpm frontend:typecheck:3001against Razor:5000for:?q=