Skip to content

feat(web): migrate UI from react-ui to @patterninc/pattern-ui - #149

Open
gauravwarale wants to merge 2 commits into
mainfrom
CU-86e3kkf9u_Revamp-Heimdall-web-UI-with-Pattern-UI
Open

gauravwarale wants to merge 2 commits into
mainfrom
CU-86e3kkf9u_Revamp-Heimdall-web-UI-with-Pattern-UI

Conversation

@gauravwarale

Copy link
Copy Markdown
Contributor

Replace the app shell, list pages, detail pages and filters with pattern-ui components, add a light/dark/system theme switcher, a right-aligned filter row above a viewport-sized table with sticky header, and use pattern-ui's CodeBlock (wrapped, padded) for job SQL.

Replace the app shell, list pages, detail pages and filters with pattern-ui
components, add a light/dark/system theme switcher, a right-aligned filter
row above a viewport-sized table with sticky header, and use pattern-ui's
CodeBlock (wrapped, padded) for job SQL.
Copilot AI balanced review requested due to automatic review settings October 6, 2026 13:11
@wiz-55ccc8b716

wiz-55ccc8b716 Bot commented Oct 6, 2026 •

Copy link
Copy Markdown

Wiz Scan Summary

Scanner Findings
Vulnerability Finding Vulnerabilities -
Data Finding Sensitive Data -
Secret Finding Secrets -
IaC Misconfiguration IaC Misconfigurations -
SAST Finding SAST Findings 1 Low
Software Management Finding Software Management Findings -
Total 1 Low

View scan details in Wiz

To detect these findings earlier in the dev lifecycle, try the Wiz Code extension for VS Code, JetBrains, or Visual Studio.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🟡 Changes recommended

Pagination resets, resource routing, filter semantics, error handling, responsive state, and tooltip accessibility have unresolved defects.

Review effort: Balanced
Findings: 1 High severity · 6 Medium severity

Open (7)
What changed in this PR

Migrates Heimdall’s web UI from react-ui to pattern-ui, introducing a new shell, themed list pages, filters, tables, and detail views.

Changes:

  • Adds responsive navigation and light/dark/system themes.
  • Rebuilds job, command, and cluster lists with shared filtering and pagination.
  • Reworks detail pages, status displays, external links, SQL rendering, and job cancellation.
File Description
web/​src/​modules/​Jobs/​TagFilter.tsx Rebuilds tag filtering.
web/​src/​modules/​Jobs/​Jobs.tsx Migrates the jobs list and pagination.
web/​src/​modules/​Jobs/​JobDetails/​JobInformationPane.tsx Rebuilds job information sections.
web/​src/​modules/​Jobs/​JobDetails/​JobDetailsHeader.tsx Removes the legacy header.
web/​src/​modules/​Jobs/​JobDetails/​JobDetails.tsx Adopts the shared detail page.
web/​src/​modules/​Jobs/​JobDetails/​CancelJobButton.tsx Adds the cancellation dialog.
web/​src/​modules/​Jobs/​Helper.tsx Defines new job table mappings.
web/​src/​modules/​Commands/​Helper.tsx Defines command table mappings.
web/​src/​modules/​Commands/​Commands.tsx Migrates the commands list.
web/​src/​modules/​Commands/​CommandDetails/​CommandInformationPane.tsx Rebuilds command information sections.
web/​src/​modules/​Commands/​CommandDetails/​CommandDetailsHeader.tsx Removes the legacy header.
web/​src/​modules/​Commands/​CommandDetails/​CommandDetails.tsx Adopts the shared detail page.
web/​src/​modules/​Clusters/​Helper.tsx Defines cluster table mappings.
web/​src/​modules/​Clusters/​ClustersDetails/​ClustersDetailsHeader.tsx Removes the legacy header.
web/​src/​modules/​Clusters/​ClustersDetails/​ClustersDetails.tsx Adopts the shared detail page.
web/​src/​modules/​Clusters/​ClustersDetails/​ClusterInformationPane.tsx Rebuilds cluster information sections.
web/​src/​modules/​Clusters/​Clusters.tsx Migrates the clusters list.
web/​src/​components/​TruncatedText/​TruncatedText.tsx Adds tooltip-based truncation.
web/​src/​components/​NavigationBar/​LeftNavContainer.tsx Removes the old navigation container.
web/​src/​components/​NavigationBar/​LeftNavBar.tsx Removes the old navigation rail.
web/​src/​components/​ListPage/​RowLink.tsx Adds accessible row links.
web/​src/​components/​ListPage/​ListPage.tsx Adds the shared list layout.
web/​src/​components/​ListPage/​ListEmptyState.tsx Adds filtered empty states.
web/​src/​components/​Header/​Header.tsx Removes the breadcrumb header.
web/​src/​components/​FilterMenu/​filterTypes.ts Defines shared filter models.
web/​src/​components/​FilterMenu/​FilterMenu.tsx Adds responsive filter menus.
web/​src/​components/​FilterMenu/​FilterControl.tsx Adds filter editors.
web/​src/​components/​ExternalLinkButton/​ExternalLinkButton.tsx Adds reusable external-link buttons.
web/​src/​components/​ErrorPage/​ErrorPage.tsx Migrates the not-found page.
web/​src/​components/​DetailPage/​TagList.tsx Adds tag-list rendering.
web/​src/​components/​DetailPage/​KeyValueList.tsx Adds key/value rendering.
web/​src/​components/​DetailPage/​ExternalLinkList.tsx Adds external-link lists.
web/​src/​components/​DetailPage/​DetailPage.tsx Adds the shared detail layout.
web/​src/​components/​DetailPage/​DetailFields.tsx Adds detail field grids.
web/​src/​components/​AppShell/​navItems.ts Defines application routes.
web/​src/​components/​AppShell/​HeimdallShell.tsx Adds the new responsive shell.
web/​src/​components/​ApiResponseButton/​ApiResponseButton.tsx Removes the legacy API button.
web/​src/​common/​Services/​status.ts Maps statuses to tag variants.
web/​src/​common/​Services/​index.ts Adds sorting and empty-value helpers.
web/​src/​common/​ReactQueryProvider/​ReactQueryProvider.tsx Updates client-only initialization.
web/​src/​common/​hooks/​useClientPagination.ts Adds shared client pagination.
web/​src/​common/​ClientLayout/​ClientLayout.tsx Loads the consolidated application root.
web/​src/​common/​ClientLayout/​AppRoot.tsx Configures UI providers.
web/​src/​common/​BreadCrumbsProvider/​context.tsx Removes breadcrumb state.
web/​src/​common/​BreadCrumbsProvider/​BreadCrumbsProvideContainer.tsx Removes the breadcrumb wrapper.
web/​src/​common/​AutoRefreshSelect/​AutoRefreshSelect.tsx Migrates auto-refresh selection.
web/​src/​common/​AutoRefreshProvider/​AutoRefreshProviderContainer.tsx Removes the redundant wrapper.
web/​src/​app/​layout.tsx Adds pre-hydration theme handling.
web/​src/​app/​globals.css Imports Pattern UI styles.
web/​pnpm-workspace.yaml Updates dependency release exclusions.
web/​package.json Replaces react-ui with pattern-ui.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread web/src/modules/Jobs/JobDetails/JobDetails.tsx Outdated
Comment thread web/src/common/hooks/useClientPagination.ts
Comment thread web/src/components/FilterMenu/FilterMenu.tsx
Comment thread web/src/components/TruncatedText/TruncatedText.tsx Outdated
Comment thread web/src/modules/Jobs/JobDetails/JobInformationPane.tsx
Comment thread web/src/modules/Jobs/Jobs.tsx
Comment thread web/src/modules/Jobs/Jobs.tsx

@JoshMDiaz Josh Diaz (JoshMDiaz) left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AI-generated

This is a full user-facing shell/list/detail cutover to pattern-ui (~52 files) with no useToggle / ToggleProvider and no leftover react-ui path. Copilot already covered the pagination-reset contract, job 404 handling, ID-vs-name filter labels, command_name routing, the nested mobile filter drawer, and truncated-text keyboard access.

Is this intended to ship ungated? Pattern-ui migrations elsewhere sit behind a conversion toggle so prod can roll back to the old shell. Heimdall may not have that toggle stack today — if not, should it, or is a hard cutover the plan?

Also: @patterninc/pattern-ui is pinned to a play-cdn snapshot (0.0.0-play-cdn.202610020641), and AppRoot imports @patterninc/pattern-ui/i18n-english-provider, which is not an export on current pattern-ui main. Worth confirming that snapshot is what you want in prod and that an upgrade path exists.

Comment thread web/src/components/AppShell/HeimdallShell.tsx
Comment thread web/src/modules/Jobs/Jobs.tsx Outdated
Comment thread web/src/modules/Commands/Commands.tsx Outdated
gauravwarale

This comment was marked as resolved.

- treat job responses without an ID as errors
- commit pagination resets so old pages are not restored
- clear nested mobile filter drawer on close
- make truncated-text tooltip trigger keyboard accessible
- route command/cluster links by ID
- label job cluster/command filters as names
- show loading state for placeholder data; cap command count at 100+
- offset sticky headers below the mobile bar

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants