Skip to content

refactor(ui): replace MUI/AntD in LineageControlButtons and LineageTable with core-components - #29540

Merged
chirag-madlani merged 28 commits into
mainfrom
lineage-control-buttons-migration
Jul 6, 2026
Merged

refactor(ui): replace MUI/AntD in LineageControlButtons and LineageTable with core-components#29540
chirag-madlani merged 28 commits into
mainfrom
lineage-control-buttons-migration

Conversation

@chirag-madlani

@chirag-madlani chirag-madlani commented Jun 26, 2026

Copy link
Copy Markdown
Collaborator

Describe your changes:

I worked on replacing all @mui/material imports in LineageControlButtons and LineageTable with the canonical @openmetadata/ui-core-components equivalents, because we are actively removing MUI from the codebase.

  • LineageControlButtons: replaced ToggleButtonGroup/ToggleButton/Tooltip/MenuItem/StyledMenu with ButtonGroup, ButtonGroupItem, Dropdown (Root/Popover/Menu/Item), and Tooltip from core-components. Removed the lineageViewOptionsAnchorEl anchor state in favour of a handleMenuAction(key) switch.
  • LineageTable: replaced MUI Button, Chip, ToggleButton, StyledToggleButtonGroup, StyledMenu, and StyledIconButton with Button, Badge, ButtonGroup, ButtonGroupItem, and Dropdown from core-components.
  • LineageTable.styled.tsx: deleted entirely — no remaining consumers.
  • LineageUtils.tsx: changed LINEAGE_IMPACT_OPTIONS icon values from <JSX /> elements to FC references to match Dropdown.Item's icon prop type.

Type of change:

  • Improvement

High-level design:

All three MUI-backed styled components (StyledMenu, StyledToggleButtonGroup, StyledIconButton) lived in LineageTable.styled.tsx. With this PR that file is deleted and selection/dropdown state is managed via react-aria-components' built-in context (no separate anchor element needed). Dropdown.Root owns open/close state internally; ButtonGroup manages toggle selection via selectedKeys/onSelectionChange from the standard MultipleSelection interface.

Tests:

Use cases covered

  • Lineage control buttons render and toggle mini-map selection
  • Lineage table upstream/downstream direction toggle
  • Impact-level dropdown (asset-level / column-level)

Unit tests

  • Updated LineageControlButtons.test.tsx: assertion changed from toHaveClass('Mui-selected')toHaveAttribute('data-selected', 'true') to match react-aria's data attribute pattern.
  • Updated LineageTable.test.tsx: removed MUI import and the now-unnecessary jest.mock('./LineageTable.styled') block.

Backend integration tests

  • Not applicable (no backend API changes).

Ingestion integration tests

  • Not applicable (no ingestion changes).

Playwright (UI) tests

  • Not applicable — existing Playwright tests cover lineage flows; no new interactions added.

Manual testing performed

UI checkstyle (organize-imports-cli → eslint --fix → prettier --write) run and passing on all modified files.

UI screen recording / screenshots:

Not applicable.

Screen.Recording.2026-06-29.at.6.09.11.PM.mov
Screen.Recording.2026-06-29.at.6.10.13.PM.mov

Checklist:

  • I have read the CONTRIBUTING document.
  • My PR title is Fixes <issue-number>: <short explanation>
  • My PR is linked to a GitHub issue via Fixes #<issue-number> above.
  • I have commented on my code, particularly in hard-to-understand areas.
  • For JSON Schema changes: I updated the migration scripts or explained why it is not needed.
  • For UI changes: I attached a screen recording and/or screenshots above.
  • I have added tests (unit / integration / Playwright as applicable) and listed them above.

Summary by Gitar

  • Component library:
    • Replaced MUI components with ButtonGroup, ButtonGroupItem, and Dropdown in LineageControlButtons and LineageTable.
    • Cleaned up ButtonGroup visual styling by reducing the default sm icon size from size-5 to size-4 in button-group.tsx.
  • Layout & Styles:
    • Restored reactflow global CSS imports in styles/index.ts to ensure lineage visualization rendering.
    • Deleted LineageTable.styled.tsx entirely as all styled components were successfully migrated.
  • Testing & Localization:
    • Updated Playwright selectors from button to radio to align with react-aria-components output.
    • Added missing impact-on and lineage-controls i18n keys across all supported locales.

This will update automatically on new commits.

--|----------|
| openmetadata-ui/src/main/resources/ui/src/components/Entity/EntityLineage/LineageControlButtons/LineageControlButtons.tsx | MUI ToggleButtonGroup/ToggleButton/StyledMenu replaced with ButtonGroup/ButtonGroupItem/Dropdown.*; anchor state removed in favour of controlled fitViewOpen boolean and handleMenuAction dispatch. |
| openmetadata-ui/src/main/resources/ui/src/components/LineageTable/LineageTable.tsx | MUI components replaced with core-components; impactOnEl anchor state removed. Dropdown.Menu has selectedKeys/selectionMode but no onSelectionChange (already threaded), and Selection spread assumes non-'all' value (already threaded). |
| openmetadata-ui/src/main/resources/ui/src/components/LineageTable/LineageTable.styled.tsx | File deleted entirely — all three styled exports (StyledMenu, StyledToggleButtonGroup, StyledIconButton) have been superseded by core-components; no remaining consumers confirmed. |
| openmetadata-ui/src/main/resources/ui/src/utils/Lineage/LineageUtils.tsx | LINEAGE_IMPACT_OPTIONS icon values changed from JSX elements to FC references to match Dropdown.Item's icon prop type — correct change. |
| openmetadata-ui/src/main/resources/ui/src/styles/index.ts | reactflow/dist/base.css and reactflow/dist/style.css re-added as global side-effect imports to restore lineage visualization styling. |
| openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/ImpactAnalysis.spec.ts | Playwright selectors updated from role=button to role=radio to match react-aria-components' ButtonGroupItem ARIA output; change is consistent and correct. |
| openmetadata-ui/src/main/resources/ui/src/components/LineageTable/LineageTable.test.tsx | Removed MUI import and jest.mock for LineageTable.styled; unit test role assertion updated to 'radio' matching the new ButtonGroupItem output. |
| openmetadata-ui/src/main/resources/ui/src/components/Entity/EntityLineage/LineageControlButtons/LineageControlButtons.test.tsx | toHaveClass('Mui-selected') assertion replaced with toHaveAttribute('data-selected', 'true') to match react-aria's data attribute pattern — correct update. |
| openmetadata-ui/src/main/resources/ui/src/pages/PlatformLineage/PlatformLineage.test.tsx | Removed jest.mock for LineageTable.styled (StyledIconButton) since the file is deleted; straightforward cleanup. |

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[LineageControlButtons] --> B[ButtonGroup\nselectionMode=multiple]
    B --> C[Dropdown.Root\nisOpen=fitViewOpen]
    C --> D[ButtonGroupItem\nfit-screen\nonPress→setFitViewOpen true]
    C --> E[Dropdown.Popover]
    E --> F[Dropdown.Menu\nonAction=handleMenuAction]
    F --> G[fit / refocus-selected\nrearrange / refocus-home]
    B --> H[ButtonGroupItem\nmind-map\nonPress→onToggleMiniMap]
    B --> I[ButtonGroupItem\nzoom-in / zoom-out]
    B --> J[ButtonGroupItem\nfull-screen\nonPress→toggleFullscreenView]

    K[LineageTable] --> L[ButtonGroup\ndisallowEmptySelection\nselectionMode=single]
    L --> M[ButtonGroupItem\nUpstream / Downstream\nonSelectionChange→updateURLParams]
    K --> N[Dropdown.Root\nuncontrolled]
    N --> O[Button\nimpact-on-dropdown]
    N --> P[Dropdown.Popover]
    P --> Q[Dropdown.Menu\nselectedKeys=impactLevel\nonAction→setSelectedImpactLevel]
    Q --> R[Dropdown.Item\nasset-level / column-level]
Loading
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
flowchart TD
    A[LineageControlButtons] --> B[ButtonGroup\nselectionMode=multiple]
    B --> C[Dropdown.Root\nisOpen=fitViewOpen]
    C --> D[ButtonGroupItem\nfit-screen\nonPress→setFitViewOpen true]
    C --> E[Dropdown.Popover]
    E --> F[Dropdown.Menu\nonAction=handleMenuAction]
    F --> G[fit / refocus-selected\nrearrange / refocus-home]
    B --> H[ButtonGroupItem\nmind-map\nonPress→onToggleMiniMap]
    B --> I[ButtonGroupItem\nzoom-in / zoom-out]
    B --> J[ButtonGroupItem\nfull-screen\nonPress→toggleFullscreenView]

    K[LineageTable] --> L[ButtonGroup\ndisallowEmptySelection\nselectionMode=single]
    L --> M[ButtonGroupItem\nUpstream / Downstream\nonSelectionChange→updateURLParams]
    K --> N[Dropdown.Root\nuncontrolled]
    N --> O[Button\nimpact-on-dropdown]
    N --> P[Dropdown.Popover]
    P --> Q[Dropdown.Menu\nselectedKeys=impactLevel\nonAction→setSelectedImpactLevel]
    Q --> R[Dropdown.Item\nasset-level / column-level]
Loading

Reviews (5): Last reviewed commit: "Merge remote-tracking branch 'origin/mai..." | Re-trigger Greptile

Greptile Summary

This PR replaces all @mui/material and @mui/material/ToggleButton/Chip/StyledMenu usages in LineageControlButtons and LineageTable with their @openmetadata/ui-core-components equivalents (ButtonGroup, ButtonGroupItem, Badge, Dropdown.*), as part of the ongoing MUI removal effort. Anchor-element state (lineageViewOptionsAnchorEl, impactOnEl) is replaced with react-aria-components' built-in controlled open state, and icon values in LINEAGE_IMPACT_OPTIONS are corrected from JSX elements to FC references to match the Dropdown.Item prop signature.

  • LineageControlButtons.tsx: Migrated from MUI ToggleButtonGroup/ToggleButton/StyledMenu to core-components ButtonGroup/ButtonGroupItem/Dropdown.*; the fit-view dropdown is now controlled via a fitViewOpen boolean and a handleMenuAction switch, with triggerRef used for popover positioning.
  • LineageTable.tsx: Replaced MUI Button, Chip, ToggleButton, StyledToggleButtonGroup, StyledMenu with Button, Badge, ButtonGroup, ButtonGroupItem, Dropdown.*; impactOnEl anchor state removed; onSelectionChange={() => void 0} added to the controlled Dropdown.Menu to satisfy react-aria's controlled-component contract.
  • Tests and locales: Unit and Playwright assertions updated to match react-aria output (data-selected, role=radio); missing impact-on and lineage-controls i18n keys added across all 20 supported locales.

Confidence Score: 5/5

Safe to merge — this is a well-scoped component library substitution with no logic changes and correctly updated tests.

The refactoring faithfully reproduces the original MUI behavior using react-aria-components primitives. The two issues noted in prior review threads (missing onSelectionChange on the controlled Dropdown.Menu and the unchecked Selection='all' spread) are both correctly addressed in the current code. Unit tests, Playwright selectors, and i18n keys are all updated in sync with the component changes.

No files require special attention.

Important Files Changed

Filename Overview
openmetadata-ui/src/main/resources/ui/src/components/Entity/EntityLineage/LineageControlButtons/LineageControlButtons.tsx Clean MUI → core-components migration; controlled Dropdown.Root with triggerRef pattern is correct; handleMenuAction switch replaces per-handler anchor resets.
openmetadata-ui/src/main/resources/ui/src/components/LineageTable/LineageTable.tsx MUI components replaced with core-components; previously flagged issues (missing onSelectionChange on controlled Dropdown.Menu, Selection type narrowing guard) are both present and correctly handled in the current code.
openmetadata-ui-core-components/src/main/resources/ui/src/components/base/button-group/button-group.tsx Icon token for sm size changed from size-5 to size-4; intentional global visual tweak noted in PR description.
openmetadata-ui/src/main/resources/ui/src/styles/index.ts Removed stale comment about reactflow CSS relocation and reordered inter-variable.css import to alphabetical position; no functional change.
openmetadata-ui/src/main/resources/ui/src/utils/Lineage/LineageUtils.tsx LINEAGE_IMPACT_OPTIONS icon values correctly changed from JSX elements to FC references to match Dropdown.Item's icon prop type.
openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/ImpactAnalysis.spec.ts Playwright selectors updated from role=button to role=radio to match ButtonGroupItem's react-aria ARIA output; change is consistent throughout the spec file.
openmetadata-ui/src/main/resources/ui/src/components/LineageTable/LineageTable.styled.tsx File deleted entirely; all three styled exports confirmed to have no remaining consumers after the migration.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[LineageControlButtons] --> B[ButtonGroup selectionMode=multiple]
    B --> C[Dropdown.Root isOpen=fitViewOpen]
    C --> D[ButtonGroupItem fit-view ref=fitScreenRef]
    C --> E[Dropdown.Popover triggerRef=fitScreenRef]
    E --> F[Dropdown.Menu selectionMode=none onAction=handleMenuAction]
    F --> G[fit / refocus-selected / rearrange / refocus-home]
    B --> H[ButtonGroupItem mind-map]
    B --> I[ButtonGroupItem zoom-in / zoom-out]
    B --> J[ButtonGroupItem full-screen]
    K[LineageTable] --> L[ButtonGroup disallowEmptySelection selectionMode=single]
    L --> M[ButtonGroupItem Upstream/Downstream]
    K --> N[Dropdown.Root uncontrolled]
    N --> O[Button impact-on-dropdown]
    N --> P[Dropdown.Popover]
    P --> Q[Dropdown.Menu selectedKeys=impactLevel onAction=setSelectedImpactLevel]
    Q --> R[Dropdown.Item asset-level / column-level]
Loading
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
flowchart TD
    A[LineageControlButtons] --> B[ButtonGroup selectionMode=multiple]
    B --> C[Dropdown.Root isOpen=fitViewOpen]
    C --> D[ButtonGroupItem fit-view ref=fitScreenRef]
    C --> E[Dropdown.Popover triggerRef=fitScreenRef]
    E --> F[Dropdown.Menu selectionMode=none onAction=handleMenuAction]
    F --> G[fit / refocus-selected / rearrange / refocus-home]
    B --> H[ButtonGroupItem mind-map]
    B --> I[ButtonGroupItem zoom-in / zoom-out]
    B --> J[ButtonGroupItem full-screen]
    K[LineageTable] --> L[ButtonGroup disallowEmptySelection selectionMode=single]
    L --> M[ButtonGroupItem Upstream/Downstream]
    K --> N[Dropdown.Root uncontrolled]
    N --> O[Button impact-on-dropdown]
    N --> P[Dropdown.Popover]
    P --> Q[Dropdown.Menu selectedKeys=impactLevel onAction=setSelectedImpactLevel]
    Q --> R[Dropdown.Item asset-level / column-level]
Loading

Reviews (20): Last reviewed commit: "Merge remote-tracking branch 'origin/mai..." | Re-trigger Greptile

…ble with core-components

Removes all @mui/material imports from LineageControlButtons and LineageTable,
replacing them with ButtonGroup, ButtonGroupItem, Dropdown, Button, and Badge
from @openmetadata/ui-core-components. Deletes the now-unused
LineageTable.styled.tsx file entirely.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@chirag-madlani
chirag-madlani requested a review from a team as a code owner June 26, 2026 18:57
@github-actions

Copy link
Copy Markdown
Contributor

❌ PR checklist incomplete

This PR cannot be merged until the following are addressed on its linked issue:

  • No GitHub issue is linked. Link an issue in the Development section of the PR (or add Fixes #12345 to the description). For a same-org cross-repo issue, add Fixes open-metadata/<repo>#123 to the description.

The fields live on the linked issue in the Shipping project (open the issue → right sidebar → Projects). After you set them, re-run this check (or push a commit) — issue/project changes do not re-trigger it automatically.

Maintainers can bypass this check by adding the skip-pr-checks label.

@github-actions github-actions Bot added safe to test Add this label to run secure Github workflows on PRs UI UI specific issues labels Jun 26, 2026
… Impact Analysis direction toggle

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Jun 27, 2026

Copy link
Copy Markdown
Contributor

🟡 Playwright Results — all passed (21 flaky)

✅ 4467 passed · ❌ 0 failed · 🟡 21 flaky · ⏭️ 54 skipped

Shard Passed Failed Flaky Skipped
🟡 Shard 1 422 0 3 33
🟡 Shard 2 817 0 7 3
✅ Shard 3 795 0 0 12
🟡 Shard 4 809 0 4 5
🟡 Shard 5 856 0 1 0
🟡 Shard 6 768 0 6 1
🟡 21 flaky test(s) (passed on retry)
  • Features/CustomizeDetailPage.spec.ts › Glossary Term - customization should work (shard 1, 1 retry)
  • Features/Glossary/GlossaryPagination.spec.ts › should filter by InReview status (shard 1, 1 retry)
  • Pages/Lineage/LineageRightPanel.spec.ts › Verify custom properties tab IS visible for supported type: metric (shard 1, 1 retry)
  • Features/BulkEditOperationBadges.spec.ts › Glossary bulk edit search filters rows and clear restores them (shard 2, 1 retry)
  • Features/BulkImport.spec.ts › Database (shard 2, 2 retries)
  • Features/BulkImport.spec.ts › Database Schema (shard 2, 1 retry)
  • Features/ContextCenterArticles.spec.ts › Article listing search filters, clears, and shows empty state (shard 2, 2 retries)
  • Features/ContextCenterArticles.spec.ts › Article list cards, recently viewed widget, and pagination work (shard 2, 1 retry)
  • Features/DataQuality/CertificationFilter.spec.ts › Certification filter narrows both table- and testCase-index queries via the flat field path (shard 2, 1 retry)
  • Features/DomainFilterQueryFilter.spec.ts › 3-level domain hierarchy: SubSubDomain assets visible when SubDomain selected (shard 2, 1 retry)
  • Flow/ExploreDiscovery.spec.ts › Should display domain and owner of deleted asset in suggestions when showDeleted is on (shard 4, 1 retry)
  • Pages/CustomProperties.spec.ts › Set & Update all CP types on apiCollection (shard 4, 1 retry)
  • Pages/DataContractInheritance.spec.ts › Delete Asset Contract - Falls back to showing inherited contract from Data Product (shard 4, 1 retry)
  • Pages/DataContracts.spec.ts › Contract Status badge should be visible on condition if Contract Tab is present/hidden by Persona (shard 4, 1 retry)
  • Pages/ExplorePageRightPanel_KnowledgeCenter.spec.ts › Should remove user owner for knowledgeCenter (shard 5, 1 retry)
  • Features/AutoPilot.spec.ts › Create Service and check the AutoPilot status (shard 6, 1 retry)
  • Pages/GlossaryImportExport.spec.ts › Import partial success - some terms pass, some fail (shard 6, 1 retry)
  • Pages/Lineage/LineageFilters.spec.ts › Verify Impact Analysis service filter selection (shard 6, 1 retry)
  • Pages/Lineage/LineageRightPanel.spec.ts › Verify custom properties tab is NOT visible for apiService in platform lineage (shard 6, 1 retry)
  • Pages/TagPageRightPanel.spec.ts › Should open right panel when clicking asset in tag assets page (shard 6, 1 retry)
  • Pages/TestSuite.spec.ts › Logical TestSuite (shard 6, 1 retry)

📦 Download artifacts

How to debug locally
# Download playwright-test-results-<shard> artifact and unzip
npx playwright show-trace path/to/trace.zip    # view trace

…ControlButtons migration

- LineageControlButtons: remove Tooltip from inside Dropdown.Root so MenuTrigger
  can propagate open/close via ButtonContext to the direct ButtonGroupItem child
- LineageTable.test.tsx: change getByRole('button') to getByRole('radio') for the
  Upstream/Downstream direction toggle, which renders as role=radio inside ButtonGroup
- PlatformLineage.test.tsx: remove jest.mock for LineageTable.styled which was
  deleted in the migration commit
- ImpactAnalysis.spec.ts: change all getByRole('button', {name: 'Upstream/Downstream…'})
  to getByRole('radio', …) to match the ToggleButtonGroup ARIA role

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Jun 27, 2026

Copy link
Copy Markdown
Contributor

Jest test Coverage

UI tests summary

Lines Statements Branches Functions
Coverage: 63%
63.77% (72753/114075) 46.92% (42350/90249) 48.2% (13021/27012)

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.

Pull request overview

This PR refactors the lineage UI components to reduce/avoid direct MUI usage by migrating LineageControlButtons and LineageTable to the canonical @openmetadata/ui-core-components primitives (ButtonGroup/Dropdown/Badge), removing the now-unused MUI-styled wrapper file, and updating unit/E2E tests accordingly.

Changes:

  • Replace MUI ToggleButtonGroup/Menu/Chip/Button usage in lineage controls/table with core-components ButtonGroup, ButtonGroupItem, Dropdown.*, Badge, and Button.
  • Remove LineageTable.styled.tsx and update unit tests/Playwright selectors to align with react-aria roles/attributes.
  • Adjust lineage impact option icons to pass component references (not JSX elements) and add new i18n keys across locales.

Reviewed changes

Copilot reviewed 30 out of 30 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
openmetadata-ui/src/main/resources/ui/src/components/Entity/EntityLineage/LineageControlButtons/LineageControlButtons.tsx Migrates lineage canvas control buttons to core-components ButtonGroup/Dropdown patterns.
openmetadata-ui/src/main/resources/ui/src/components/Entity/EntityLineage/LineageControlButtons/LineageControlButtons.test.tsx Updates assertions to react-aria’s data-selected pattern.
openmetadata-ui/src/main/resources/ui/src/components/LineageTable/LineageTable.tsx Migrates table direction toggles + impact-level dropdown to core-components.
openmetadata-ui/src/main/resources/ui/src/components/LineageTable/LineageTable.test.tsx Removes MUI/styled mocks and updates role-based queries to match react-aria output.
openmetadata-ui/src/main/resources/ui/src/components/LineageTable/LineageTable.styled.tsx Deletes the MUI-styled helper components now that consumers moved to core-components.
openmetadata-ui/src/main/resources/ui/src/pages/PlatformLineage/PlatformLineage.test.tsx Removes mocks that referenced the deleted LineageTable.styled.tsx.
openmetadata-ui/src/main/resources/ui/src/utils/Lineage/LineageUtils.tsx Changes impact option icons from JSX elements to component references for Dropdown typing.
openmetadata-ui/src/main/resources/ui/src/styles/index.ts Reorders CSS imports (notably inter-variable.css).
openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/ImpactAnalysis.spec.ts Updates selectors from role=button to role=radio for ButtonGroupItem direction toggles.
openmetadata-ui-core-components/src/main/resources/ui/src/components/base/button-group/button-group.tsx Tweaks small-size ButtonGroup icon sizing.
openmetadata-ui/src/main/resources/ui/src/locale/languages/en-us.json Adds new impact-on and lineage-controls keys.
openmetadata-ui/src/main/resources/ui/src/locale/languages/ar-sa.json Adds new impact-on and lineage-controls keys.
openmetadata-ui/src/main/resources/ui/src/locale/languages/de-de.json Adds new impact-on and lineage-controls keys.
openmetadata-ui/src/main/resources/ui/src/locale/languages/es-es.json Adds new impact-on and lineage-controls keys.
openmetadata-ui/src/main/resources/ui/src/locale/languages/fr-fr.json Adds new impact-on and lineage-controls keys.
openmetadata-ui/src/main/resources/ui/src/locale/languages/gl-es.json Adds new impact-on and lineage-controls keys.
openmetadata-ui/src/main/resources/ui/src/locale/languages/he-he.json Adds new impact-on and lineage-controls keys.
openmetadata-ui/src/main/resources/ui/src/locale/languages/ja-jp.json Adds new impact-on and lineage-controls keys.
openmetadata-ui/src/main/resources/ui/src/locale/languages/ko-kr.json Adds new impact-on and lineage-controls keys.
openmetadata-ui/src/main/resources/ui/src/locale/languages/mr-in.json Adds new impact-on and lineage-controls keys.
openmetadata-ui/src/main/resources/ui/src/locale/languages/nl-nl.json Adds new impact-on and lineage-controls keys.
openmetadata-ui/src/main/resources/ui/src/locale/languages/pr-pr.json Adds new impact-on and lineage-controls keys.
openmetadata-ui/src/main/resources/ui/src/locale/languages/pt-br.json Adds new impact-on and lineage-controls keys.
openmetadata-ui/src/main/resources/ui/src/locale/languages/pt-pt.json Adds new impact-on and lineage-controls keys.
openmetadata-ui/src/main/resources/ui/src/locale/languages/ru-ru.json Adds new impact-on and lineage-controls keys.
openmetadata-ui/src/main/resources/ui/src/locale/languages/sv-se.json Adds new impact-on and lineage-controls keys.
openmetadata-ui/src/main/resources/ui/src/locale/languages/th-th.json Adds new impact-on and lineage-controls keys.
openmetadata-ui/src/main/resources/ui/src/locale/languages/tr-tr.json Adds new impact-on and lineage-controls keys.
openmetadata-ui/src/main/resources/ui/src/locale/languages/zh-cn.json Adds new impact-on and lineage-controls keys.
openmetadata-ui/src/main/resources/ui/src/locale/languages/zh-tw.json Adds new impact-on and lineage-controls keys.

Comment on lines +295 to 301
onSelectionChange={(keys: Selection) => {
const value = [...(keys as Set<LineageDirection>)][0];
if (value) {
handlePageChange(1);
updateURLParams({ dir: value });
}
}}>
))}
</StyledMenu>
}}
onSelectionChange={() => void 0}>
Comment on lines 42 to 44
import './fonts.less';
import './inter-variable.css';
import './knowledge-center.less';

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 was unable to review this pull request because the user who requested the review has reached their quota limit.

chirag-madlani and others added 2 commits July 3, 2026 17:06
- Add triggerRef to Dropdown.Popover so it correctly anchors to the fit-screen button
- Set selectionMode="none" on Dropdown.Menu so items get role="menuitem" (not menuitemradio)
  which matches what the Playwright rearrangeNodes() helper expects

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

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 was unable to review this pull request because the user who requested the review has reached their quota limit.

chirag-madlani and others added 2 commits July 6, 2026 12:26
…uttonGroup

- Replace `#lineage-view-options-menu` (old MUI anchor) with `getByRole('menu')` in LineageControls and LineageExportPNGSnapshot tests
- Replace `getByRole('button', ...)` with `getByRole('radio', ...)` for Upstream/Downstream buttons in LineageFilters impact-analysis tests — ToggleButtonGroup with selectionMode="single" assigns role="radio" to items per react-aria spec

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

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 was unable to review this pull request because the user who requested the review has reached their quota limit.

chirag-madlani and others added 2 commits July 6, 2026 19:11
… avoid strict-mode AntD collision

getByRole('menu') matched the two AntD left-sidebar menus as well as our
react-aria dropdown, causing a Playwright strict-mode violation. Scoping to
{ name: 'Lineage View Options' } matches only the dropdown's aria-label.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

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 was unable to review this pull request because the user who requested the review has reached their quota limit.

@sonarqubecloud

sonarqubecloud Bot commented Jul 6, 2026

Copy link
Copy Markdown

@gitar-bot

gitar-bot Bot commented Jul 6, 2026

Copy link
Copy Markdown
Code Review ✅ Approved 3 resolved / 3 findings

Replaces MUI components with canonical core-components in Lineage modules and deletes the legacy styled-components file. Resolves previously flagged issues regarding missing i18n keys, tooltip hover, and reactflow styling.

✅ 3 resolved
Quality: Fit-view dropdown trigger lost its hover tooltip

📄 openmetadata-ui/src/main/resources/ui/src/components/Entity/EntityLineage/LineageControlButtons/LineageControlButtons.tsx:131-137 📄 openmetadata-ui/src/main/resources/ui/src/components/Entity/EntityLineage/LineageControlButtons/LineageControlButtons.tsx:166-175
In the latest commit, the <Tooltip> wrapper around the fit-view ButtonGroupItem (the Dropdown trigger) was removed, while every sibling control button (mind-map, zoom-in, zoom-out, full-screen) is still wrapped in a Tooltip. This creates a UX inconsistency: hovering the view-options button no longer shows the label.lineage-view-option-plural tooltip, even though the same string is still passed as aria-label. Accessibility is preserved via aria-label, so this is minor, but if the wrapper was removed because nesting a Tooltip around a Dropdown.Root trigger broke the popover, consider using the core-components Dropdown's own tooltip/trigger affordance instead so the hover hint is restored for parity with the other buttons.

Quality: New aria-label i18n keys are missing from locale files

📄 openmetadata-ui/src/main/resources/ui/src/components/Entity/EntityLineage/LineageControlButtons/LineageControlButtons.tsx:121 📄 openmetadata-ui/src/main/resources/ui/src/components/LineageTable/LineageTable.tsx:417
This PR introduces two new translation keys that are referenced via t() but do not exist in src/locale/languages/en-us.json (verified by grep — neither lineage-controls nor impact-on is present under label):

  • LineageControlButtons.tsx: aria-label={t('label.lineage-controls')} on the ButtonGroup.
  • LineageTable.tsx: aria-label={t('label.impact-on')} on the impact-level Dropdown.Menu.

Because the keys are absent, i18next falls back to returning the raw key string, so screen readers will announce the literal accessible names "label.lineage-controls" and "label.impact-on" instead of human-readable labels. This is an accessibility regression and may also fail OpenMetadata's locale-key validation tooling, which expects keys to be present (and mirrored across all language files).

Fix: add lineage-controls and impact-on entries under the label namespace in en-us.json and all other locale JSON files. (Note: the other new keys used in the diff — lineage-view-option-plural, mind-map, fit-to-screen, refocused-to-selected, rearrange-nodes, refocused-to-home — already exist and are fine.)

Quality: Re-added reactflow CSS imports contradict the comment above them

📄 openmetadata-ui/src/main/resources/ui/src/styles/index.ts:22-29
Lines 28-29 re-add import 'reactflow/dist/base.css' and import 'reactflow/dist/style.css' directly beneath the comment block (lines 22-27) that explains these imports were intentionally removed because they kept vendor-reactflow in the entry chunk's modulepreload list and should instead be co-located with the lineage runtime so the CSS only loads when the lineage canvas mounts. The comment now actively contradicts the code: it claims reactflow CSS is loaded lazily near the runtime, while the side-effect imports here pull it into the global entry bundle. A grep confirms no reactflow CSS import exists in LineageProvider (the comment's claimed location); the CSS is only imported in WorkflowCanvas.tsx and PortsLineageView.component.tsx. This re-introduces the bundle-size regression the comment describes (vendor-reactflow back in the entry chunk's modulepreload). If the global import is the intended fix to restore lineage styling, update or delete the now-misleading comment to avoid confusing future maintainers; otherwise, scope the CSS to the lineage component as the comment prescribes.

Options

Display: compact → Showing less information.

Comment with these commands to change the behavior for this request:

Compact
gitar display:verbose         

Was this helpful? React with 👍 / 👎 | Gitar

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

safe to test Add this label to run secure Github workflows on PRs skip-pr-checks Bypass PR metadata validation check UI UI specific issues

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants