migrate services, nodes, service instances, intentions and access control pages to new UI - #23707
Closed
rishabh-gupta-hashicorp wants to merge 26 commits into
Closed
migrate services, nodes, service instances, intentions and access control pages to new UI#23707rishabh-gupta-hashicorp wants to merge 26 commits into
rishabh-gupta-hashicorp wants to merge 26 commits into
Conversation
suresh-hashicorp
force-pushed
the
rishabh-gupta/ui/migrate-list-pages-to-new-table-ui
branch
from
July 15, 2026 06:04
35ee7a1 to
097e06a
Compare
Merged
4 tasks
suresh-hashicorp
added a commit
that referenced
this pull request
Jul 17, 2026
…engine constraint - Add $schema, installCommand (pnpm install --no-frozen-lockfile), buildCommand (make dist-vercel), and outputDirectory to ui/vercel.json - Remove unsupported 'public' flag from ui/vercel.json - Relax engines.pnpm constraint from '>= 10.*' to '>= 9' in ui/package.json so Vercel's bundled pnpm 9 can satisfy it during install - Document workspace Vercel config location in ui/README.md Backport of changes from #23707.
suresh-hashicorp
added a commit
that referenced
this pull request
Jul 17, 2026
…engine constraint - Add $schema, installCommand (pnpm install --no-frozen-lockfile), buildCommand (make dist-vercel), and outputDirectory to ui/vercel.json - Remove unsupported 'public' flag from ui/vercel.json - Relax engines.pnpm constraint from '>= 10.*' to '>= 9' in ui/package.json so Vercel's bundled pnpm 9 can satisfy it during install - Document workspace Vercel config location in ui/README.md Backport of changes from #23707.
4 tasks
- Move Consul logo, help dropdown, and token selector from the dark side nav header into a full-width top bar using Hds::AppHeader - Switch Hds::AppSideNav from dark to light theme by removing all dark palette CSS overrides; keep only structural layout rules - Enable Frame.Header in app/index.hbs and add id='hds-main' to Frame.Main for AppHeader skip-link accessibility (WCAG 2.4.1) - nav-selector: add @isInline, @preserveContentInDom, @matchToggleWidth, @color='secondary', @isFullWidth to the HDS Dropdown so the selector toggle fills its container and dropdown items are always in the DOM (required for acceptance test selectors to work after a dc toggle click) - Add .hds-side-nav__dropdown { display: block } to override the inline-block imposed by @isInline so @isFullWidth can fill the li - pageobject: add resetScope:true to authMenu and login clickables since they moved from [data-test-navigation] into the AppHeader - consul/token/selector: change @listPosition to bottom-right on all three Dropdown instances so the token menu opens toward the right edge of the now-right-aligned header actions - Fix a11y violations: remove duplicate role=navigation, remove duplicate aria-labelledby attrs on AppSideNav::List elements, restore id=contentinfo on the footer div - app-test: assert AppHeader slot is rendered; remove old assertion that it should not exist - datacenter/selector-test: stub router:main.location.hrefTo so @preserveContentInDom does not cause href-to failures in integration tests where the router location is a bare string
- Switch AppHeader::HomeLink from consul-color to the monochrome consul
icon, which uses currentColor and can be styled via CSS
- Add .hds-app-header__home-link { color: #ffffff } so the icon appears
white against the AppHeader dark surface
- Update public/assets/favicon.svg fill from #E03875 (pink) to #ffffff
(white) to match the white icon shown in the new header design
- Switch AppHeader::HomeLink from consul-color to the monochrome consul
icon, which uses currentColor and can be styled via CSS
- Add .hds-app-header__home-link { color: #ffffff } so the icon appears
white against the AppHeader dark surface
- Update favicon.svg fill from #E03875 (pink) to #000000 (black),
keeping the original transparent background
- Regenerate favicon.ico from updated SVG (16x16 + 32x32, black icon,
transparent background)
- kv-filter-test: update search selector from [name="s"] to [name="search"] to match the new Hds::FilterBar search input - text-input-test: rewrite for the new flyout-based KV create flow; there is no longer a /kv/create sub-route — the Create button opens a flyout on the list page, so scope all interactions to dialog
suresh-hashicorp
force-pushed
the
rishabh-gupta/ui/migrate-list-pages-to-new-table-ui
branch
from
August 3, 2026 03:20
3c53602 to
9c8e400
Compare
…res)
Migrate four ACL list feature files to native QUnit acceptance tests:
- dc/acls/auth-methods/index.feature → index-test.js
- dc/acls/policies/index.feature → index-test.js
- dc/acls/roles/index.feature → index-test.js
- dc/acls/tokens/index.feature → index-test.js
Root cause of the 16 ENT failures: the Yadda step
'I type "..." into "input[type=search]"'
matched two elements under CONSUL_NSPACES_ENABLED=1 — the list
FilterBar search input AND the namespace side-nav selector search.
The native QUnit tests use the unambiguous '.hds-filter-bar__search'
selector, eliminating the collision.
Additional fixes made during migration:
- Roles/tokens policy assertions: page object text() returned only the
first character of HDS Badge text (nested spans); switched to
assert.dom(...).hasAttribute('aria-label', ...) which uses the
aria-label the RulesetBadge component sets.
- Tokens no-write scenario: direct document.cookie writes are not
picked up by the Ember env service; use api.server.setCookie() instead.
Also deletes the four matching *-steps.js stubs (now unused) and
updates YADDA_MIGRATION.md tracker:
- 117 → 113 feature files remaining
- 277 → 265 scenarios remaining
- 12 → 16 feature files migrated
- 16 → 28 scenarios migrated
…ailures) Two app templates called href-to 'dc.services.index' without passing the required dc dynamic-segment model. Under CE the router tolerates this (it infers dc from the active transition context), but under ENT the custom location service throws: 'More context objects were passed than there are dynamic segments for the route: dc.services.index' Fixes: - topology-metrics/card/index.hbs: add @dc as positional model arg. - consul/nspace/selector/index.hbs: add @dc.Name as positional model arg and remove the now-redundant dc= key from the params hash. This resolves the 8 ENT failures in: - dc/services/show-routing.feature (4 namespace variants) - dc/services/show/dc-switch.feature (4 namespace variants)
All 19 lint errors were prettier/prettier violations in the legacy scenario helper callbacks — Prettier collapses short array literals and reshapes function argument indentation differently from how the file was written by hand. Auto-fixed with pnpm exec prettier --write.
After cherry-picking 097cf32 (kv page ui implementation), the KV create flow uses a dedicated dc.kv.root-create route again instead of a flyout/dialog. Update the test to: - navigate via [data-test-create] button click (no dialog scope) - interact with form fields without 'dialog' prefix - assert submit enabled via assert.dom('main [type=submit]').isNotDisabled instead of page().submitIsEnabled (which required currentPage tracking via visit())
The KV create route works identically regardless of namespace context. Under CONSUL_NSPACES_ENABLED=1 the nspaceScenario matrix was running the test with nspace='default' and 'team-1', but the app redirects ~default to the non-prefixed URL, causing the currentURL assertion to fail. The original .feature had no namespace annotation; mark the QUnit port with notNamespaceable:true to match that intent.
- global-setup: fall back to setting consul:token via localStorage when
the UI login flow is unavailable (ember serve has ACLsEnabled=false
by default; CI builds served by the Go binary have it true).
Resolves token from /v1/acl/token/self to capture full AccessorID/
Namespace/Partition shape before saving storageState.
- openKVCreateInFolder: folder rows render the name as a <button>
(they expand inline), not a <link>. Fix the tr filter to use
getByRole('button') and fix the actions toggle to use getByLabel
('Open actions menu') instead of getByRole('button',{name:'More'}).
- should create folder and key inside it: clicking a folder button
expands it inline; there is no page navigation. Replace the
toHaveURL(/e2e-folder/) assertion with a visibility wait for the
child row button.
suresh-hashicorp
force-pushed
the
rishabh-gupta/ui/migrate-list-pages-to-new-table-ui
branch
from
August 3, 2026 15:13
9ce210d to
d9998d8
Compare
Contributor
Author
|
New PR with feature branch for these changes - #23778 |
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.
Description
Testing & Reproduction steps
Links
PR Checklist
PCI review checklist
I have documented a clear reason for, and description of, the change I am making.
If applicable, I've documented a plan to revert these changes if they require more than reverting the pull request.
If applicable, I've documented the impact of any changes to security controls.
Examples of changes to security controls include using new access control methods, adding or removing logging pipelines, etc.