Repository navigation
fix(admin): use the shared page header on list pages - #4437
Closed
khoinguyenpham04 wants to merge 2 commits into
Closed
khoinguyenpham04 wants to merge 2 commits into
khoinguyenpham04 wants to merge 2 commits into
Conversation
Dashboard, content lists, Users, Bylines, Byline schema, Menus, Categories, Tags, Sections, Widgets and Content Types each built their own header, so titles, descriptions, dividers and buttons sat in different places and the main action was primary on some pages only. PageHeader now takes optional tabs, wraps its actions under the title on narrow screens, gives every tab the same size and starts its tools right after the tabs. Each list page renders it with its search and filters as tools and its main action as the primary button. Categories and Tags share one set of actions, with "New taxonomy" in the overflow menu. On content lists, "Clear filters" keeps its place in the filter row while hidden, so setting a filter no longer re-wraps the row and moves the table.
🦋 Changeset detectedLatest commit: 2057521 The changes in this PR will be included in the next version bump. This PR includes changesets to release 12 packages
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
11 of 22 tasks
Deploying with
|
| Status | Name | Latest Commit | Updated (UTC) |
|---|---|---|---|
| ✅ Deployment successful! View logs |
docs | c95b2a9 | Oct 27 2026, 03:13 PM |
🚀 Deploying Preview to Cloudflare 🚀Preview URL: https://noah-admin-page-header.try.emdashcms.com, https://noah-admin-page-header-emdash-playground.emdash-cms.workers.dev (commit 2057521)This URL reflects your latest Preview deploymentPreview Deployments by commit
|
@emdash-cms/admin
@emdash-cms/auth
@emdash-cms/auth-atproto
@emdash-cms/blocks
@emdash-cms/cloudflare
@emdash-cms/contentful-to-portable-text
emdash
create-emdash
@emdash-cms/gutenberg-to-portable-text
@emdash-cms/plugin-cli
@emdash-cms/plugin-test
@emdash-cms/plugin-types
@emdash-cms/registry-client
@emdash-cms/registry-lexicons
@emdash-cms/registry-loader
@emdash-cms/registry-moderation
@emdash-cms/registry-verification
upgrade-emdash
@emdash-cms/sandbox-workerd
@emdash-cms/x402
@emdash-cms/plugin-ai-moderation
@emdash-cms/plugin-ai-search
@emdash-cms/plugin-atproto
@emdash-cms/plugin-audit-log
@emdash-cms/plugin-color
@emdash-cms/plugin-embeds
@emdash-cms/plugin-field-kit
@emdash-cms/plugin-forms
@emdash-cms/plugin-webhook-notifier
commit: |
Contributor
Visual regression: 14 screens changedThese admin screens render differently on this PR. Confirm every change below is intended before accepting.
Maintainers: if every change above is intended, comment Measured head: |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.














What does this PR do?
Each list page in the admin built its own header, so the header changed from page to page:
This PR makes the existing
PageHeaderthe header for every list page.PageHeaderitself:tabsis now optional.variant="primary", and other actions usesecondary.mainit moves 34px at 1050–1140px, and on phones the text button adds a row.Pages changed: Dashboard, Posts and Pages, Users, Bylines, Byline schema, Menus, Categories, Tags, Sections, Widgets and Content Types. Comments, Redirects and Calendar already used
PageHeaderand pick up its tab, alignment and wrapping changes. Calendar still passes the tab classes thatPageHeadernow adds; that cleanup is left for after #4151, which changes the same file.Out of scope:
PageHeaderdoesn't support yet.Stacked on #4436, which makes the primary "Add New" and "New Content Type" links render correctly.
Type of change
Your connection to this change
Checklist
pnpm typecheckpassespnpm lintpassespnpm testpasses (or targeted tests for my change)pnpm formathas been runmessages.pochanges except in translation PRs — a workflow extracts catalogs on merge tomain.Not applicable:
BulkTagDialogtest's routerLinkmock now forwardsclassNameandstylelike the real one. Before, the primary "Add New" button's overlay covered the page in that test.mainat 32 widths), and that "Clear filters" stays out of the accessibility tree until a filter is active.AI assistance disclosure
Screenshots / test output
More list pages
Phone (390px)
Arabic
Design review scores
Three reviewer models scored main against this branch, using the same screenshots and rubric: typography, hierarchy, spacing, color, iconography, consistency, clarity and phone. Each round's findings were fixed before the next round. The scores cover this PR together with the toolbar height PR stacked on top of it.
Round 3 was a confirmation pass after the round-2 fixes. It found no new regressions and nothing left that must be fixed.
Consistency rose the most, from about 5.3 to 7.4.
The full admin suite passes: 259 files and 3,751 tests. One editor toolbar test in
PortableTextEditor.test.tsx, which this PR doesn't touch, failed once and passed on a rerun.