Skip to content

feat: Add data dimensions, health, incident metrics, and test case status translations in multiple languages#26765

Open
ShaileshParmar11 wants to merge 10 commits intomainfrom
dq-dashboard-migrate
Open

feat: Add data dimensions, health, incident metrics, and test case status translations in multiple languages#26765
ShaileshParmar11 wants to merge 10 commits intomainfrom
dq-dashboard-migrate

Conversation

@ShaileshParmar11
Copy link
Contributor

  • Updated Spanish, French, Galician, Hebrew, Japanese, Korean, Marathi, Dutch, Persian, Brazilian Portuguese, European Portuguese, Russian, Thai, Turkish, Simplified Chinese, and Traditional Chinese language files to include new keys for data dimensions, data health, incident metrics, and test case status.
  • Enhanced the Data Quality dashboard by integrating a new dashboard component and updating the sidebar to include a summary tab.
  • Modified Data Quality utility functions to support new test case status filtering and data transformation for improved reporting.
  • Introduced new styles for the dashboard and updated existing variables for better visual representation.

Describe your changes:

Fixes

I worked on ... because ...

Type of change:

  • Bug fix
  • Improvement
  • New feature
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Documentation

Checklist:

  • I have read the CONTRIBUTING document.
  • My PR title is Fixes <issue-number>: <short explanation>
  • 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.

…atus translations in multiple languages

- Updated Spanish, French, Galician, Hebrew, Japanese, Korean, Marathi, Dutch, Persian, Brazilian Portuguese, European Portuguese, Russian, Thai, Turkish, Simplified Chinese, and Traditional Chinese language files to include new keys for data dimensions, data health, incident metrics, and test case status.
- Enhanced the Data Quality dashboard by integrating a new dashboard component and updating the sidebar to include a summary tab.
- Modified Data Quality utility functions to support new test case status filtering and data transformation for improved reporting.
- Introduced new styles for the dashboard and updated existing variables for better visual representation.
@github-actions github-actions bot added safe to test Add this label to run secure Github workflows on PRs UI UI specific issues labels Mar 25, 2026
- Updated Russian, Thai, Turkish, Simplified Chinese, and Traditional Chinese language files to include new keys for data dimensions, data health, incident metrics, and test case status.
- Added sub-header descriptions for data dimensions, data health, and incident metrics in respective language files.
- Refactored imports in DataQualityClassBase, TagPage, DomainClassBase, and GlossaryTermClassBase to maintain consistent import order and structure.
- Improved test cases in DomainClassBase, GlossaryTermClassBase, and TagClassBase for better readability and maintainability.
- Removed unnecessary lines in TagClassBase.test.ts and TagsUtils.tsx to clean up the code.
…efine search query logic in DataQualityDashboard
@ShaileshParmar11 ShaileshParmar11 marked this pull request as ready for review March 26, 2026 12:42
@ShaileshParmar11 ShaileshParmar11 requested a review from a team as a code owner March 26, 2026 12:42
Copilot AI review requested due to automatic review settings March 26, 2026 12:42
Copy link
Contributor

Copilot AI left a comment

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 expands the Data Quality experience by adding a new “Summary/Dashboard” view and surfacing “Data Observability” tabs on governance entities (Tags, Glossary Terms, Domains), alongside broad i18n updates for the new dashboard content.

Changes:

  • Adds a Data Quality dashboard “Summary” tab and left-sidebar entry, and makes it the default Data Quality landing tab.
  • Introduces a reusable DataQualityDashboard component plus multiple new chart widgets (pie/area/status cards) and supporting utilities/constants/styles.
  • Updates many locale JSONs with new keys for data dimensions, data health, incident metrics, and test case status.

Reviewed changes

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

Show a summary per file
File Description
openmetadata-ui/src/main/resources/ui/src/utils/TagClassBase.ts Adds DATA_OBSERVABILITY tab ID to tag detail tab set.
openmetadata-ui/src/main/resources/ui/src/utils/TagClassBase.test.ts Updates expectations for the new tab and mocks i18n util.
openmetadata-ui/src/main/resources/ui/src/utils/Glossary/GlossaryTermClassBase.ts Appends a Data Observability tab (DataQualityDashboard) to glossary term detail view.
openmetadata-ui/src/main/resources/ui/src/utils/Glossary/GlossaryTermClassBase.test.ts Adds tests for the new tab behavior and props passed to the dashboard.
openmetadata-ui/src/main/resources/ui/src/utils/Domain/DomainClassBase.ts Appends a Data Observability tab (DataQualityDashboard) to domain detail view.
openmetadata-ui/src/main/resources/ui/src/utils/Domain/DomainClassBase.test.ts Adds tests validating the new domain tab behavior and filters.
openmetadata-ui/src/main/resources/ui/src/utils/DataQuality/DataQualityUtils.tsx Adds helpers for dashboard navigation and status-by-dimension transformation and pie labels.
openmetadata-ui/src/main/resources/ui/src/styles/variables.less Introduces @green-100 used by new widget styles.
openmetadata-ui/src/main/resources/ui/src/pages/TagPage/tag-page.less Adds styling to size the new DQ tab pane.
openmetadata-ui/src/main/resources/ui/src/pages/TagPage/TagPage.tsx Adds Data Observability tab to Tag page and aligns tab keys with EntityTabs.
openmetadata-ui/src/main/resources/ui/src/pages/DataQuality/DataQualityClassBase.ts Adds “Summary” sidebar entry/tab and makes it the default.
openmetadata-ui/src/main/resources/ui/src/constants/DataQuality.constants.ts Adds dashboard header metadata, dimension defaults, and DQ filter key constants.
openmetadata-ui/src/main/resources/ui/src/components/DataQuality/DataQualityDashboard/DataQualityDashboard.component.tsx New dashboard view with filter bar, cards, and chart grid.
openmetadata-ui/src/main/resources/ui/src/components/DataQuality/DataQualityDashboard/DataQualityDashboard.interface.ts New dashboard filter type(s).
openmetadata-ui/src/main/resources/ui/src/components/DataQuality/DataQualityDashboard/data-quality-dashboard.style.less New styles for dashboard and governance embedding layout.
openmetadata-ui/src/main/resources/ui/src/components/DataQuality/DataQuality.interface.ts Extends widget prop contracts to support new dashboard widgets.
openmetadata-ui/src/main/resources/ui/src/components/DataQuality/ChartWidgets/ChartWidgets.constants.ts Adds shared pie segment orders for consistent click→status mapping.
openmetadata-ui/src/main/resources/ui/src/components/DataQuality/ChartWidgets/chart-widgets.less Adds shared styling helpers for chart widgets.
openmetadata-ui/src/main/resources/ui/src/components/DataQuality/ChartWidgets/** Adds multiple new chart/widget components and corresponding unit tests.
openmetadata-ui/src/main/resources/ui/src/locale/languages/*.json Adds new translation keys across many supported locales.

Comment on lines +86 to +88
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const childProps = (dqTab?.children as any).props;

Copy link

Copilot AI Mar 26, 2026

Choose a reason for hiding this comment

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

Avoid using any for dqTab?.children in tests. This repo has a zero-tolerance rule for any in TS; instead, narrow children to a ReactElement and read props via a typed cast (e.g., React.ReactElement<{ isGovernanceView: boolean }>), or use a helper to extract props safely.

Copilot uses AI. Check for mistakes.
Comment on lines +95 to +97
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const childProps = (dqTab?.children as any).props;

Copy link

Copilot AI Mar 26, 2026

Choose a reason for hiding this comment

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

Avoid using any for dqTab?.children in tests. Please narrow to a typed ReactElement (or add a small typed helper) so the test can access initialFilters without disabling @typescript-eslint/no-explicit-any.

Copilot uses AI. Check for mistakes.
Comment on lines +106 to +108
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const childProps = (dqTab?.children as any).props;

Copy link

Copilot AI Mar 26, 2026

Choose a reason for hiding this comment

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

Avoid using any for dqTab?.children in tests. Please replace the any cast with a typed ReactElement cast or a type guard so we keep strict type-safety and don't need the eslint disable.

Copilot uses AI. Check for mistakes.
@github-actions
Copy link
Contributor

github-actions bot commented Mar 26, 2026

❌ Lint Check Failed — ESLint + Prettier + Organise Imports (src)

The following files have style issues that need to be fixed:
src/components/DataQuality/ChartWidgets/ChartWidgets.constants.ts src/components/DataQuality/ChartWidgets/DataAssetsCoveragePieChartWidget/DataAssetsCoveragePieChartWidget.component.tsx src/components/DataQuality/ChartWidgets/DataAssetsCoveragePieChartWidget/DataAssetsCoveragePieChartWidget.test.tsx src/components/DataQuality/ChartWidgets/DataStatisticWidget/DataStatisticWidget.component.tsx src/components/DataQuality/ChartWidgets/DataStatisticWidget/DataStatisticWidget.test.tsx src/components/DataQuality/ChartWidgets/EntityHealthStatusPieChartWidget/EntityHealthStatusPieChartWidget.component.tsx src/components/DataQuality/ChartWidgets/EntityHealthStatusPieChartWidget/EntityHealthStatusPieChartWidget.test.tsx src/components/DataQuality/ChartWidgets/IncidentTimeChartWidget/IncidentTimeChartWidget.component.tsx src/components/DataQuality/ChartWidgets/IncidentTimeChartWidget/IncidentTimeChartWidget.test.tsx src/components/DataQuality/ChartWidgets/IncidentTypeAreaChartWidget/IncidentTypeAreaChartWidget.component.tsx src/components/DataQuality/ChartWidgets/IncidentTypeAreaChartWidget/IncidentTypeAreaChartWidget.test.tsx src/components/DataQuality/ChartWidgets/StatusByDimensionCardWidget/StatusByDimensionCardWidget.component.tsx src/components/DataQuality/ChartWidgets/StatusByDimensionCardWidget/StatusByDimensionCardWidget.test.tsx src/components/DataQuality/ChartWidgets/StatusCardWidget/StatusCardWidget.component.tsx src/components/DataQuality/ChartWidgets/StatusCardWidget/StatusCardWidget.interface.ts src/components/DataQuality/ChartWidgets/StatusCardWidget/StatusCardWidget.test.tsx src/components/DataQuality/ChartWidgets/TestCaseStatusAreaChartWidget/TestCaseStatusAreaChartWidget.component.tsx src/components/DataQuality/ChartWidgets/TestCaseStatusAreaChartWidget/TestCaseStatusAreaChartWidget.test.tsx src/components/DataQuality/ChartWidgets/TestCaseStatusPieChartWidget/TestCaseStatusPieChartWidget.component.tsx src/components/DataQuality/ChartWidgets/TestCaseStatusPieChartWidget/TestCaseStatusPieChartWidget.test.tsx src/components/DataQuality/DataQualityDashboard/DataQualityDashboard.component.tsx src/components/DataQuality/DataQualityDashboard/DataQualityDashboard.interface.ts src/components/DataQuality/DataQualityDashboard/DataQualityDashboard.test.tsx src/utils/Domain/DomainClassBase.test.ts src/components/DataQuality/DataQuality.interface.ts src/components/Glossary/GlossaryTerms/GlossaryTermsV1.test.tsx src/constants/DataQuality.constants.ts src/locale/languages/ar-sa.json src/locale/languages/de-de.json src/locale/languages/en-us.json src/locale/languages/es-es.json src/locale/languages/fr-fr.json src/locale/languages/gl-es.json src/locale/languages/he-he.json src/locale/languages/ja-jp.json src/locale/languages/ko-kr.json src/locale/languages/mr-in.json src/locale/languages/nl-nl.json src/locale/languages/pr-pr.json src/locale/languages/pt-br.json src/locale/languages/pt-pt.json src/locale/languages/ru-ru.json src/locale/languages/th-th.json src/locale/languages/tr-tr.json src/locale/languages/zh-cn.json src/locale/languages/zh-tw.json src/pages/DataQuality/DataQualityClassBase.ts src/pages/TagPage/TagPage.test.tsx src/pages/TagPage/TagPage.tsx src/utils/DataQuality/DataQualityUtils.tsx src/utils/Domain/DomainClassBase.ts src/utils/Glossary/GlossaryTermClassBase.test.ts src/utils/Glossary/GlossaryTermClassBase.ts src/utils/TagClassBase.test.ts src/utils/TagClassBase.ts

Fix locally (fast — changed files only):

cd openmetadata-ui/src/main/resources/ui
yarn ui-checkstyle:changed

Or to fix all files: yarn ui-checkstyle

@gitar-bot
Copy link

gitar-bot bot commented Mar 26, 2026

Code Review 👍 Approved with suggestions 5 resolved / 6 findings

Adds multilingual translations for data dimensions, health, incident metrics, and test case status across the DataQualityDashboard and related UI components. Resolved issues with double scrollbars, Persian translation duplication, and stale timestamp constants; consider completing the TagTabs → EntityTabs migration in TagPage.tsx to maintain consistency.

💡 Quality: Incomplete TagTabs → EntityTabs migration in TagPage.tsx

📄 openmetadata-ui/src/main/resources/ui/src/pages/TagPage/TagPage.tsx:118 📄 openmetadata-ui/src/main/resources/ui/src/pages/TagPage/TagPage.tsx:402-403

The diff migrates several TagTabs references to EntityTabs in the tab definitions, but three usages of TagTabs remain in the same file:

  1. const { tab: activeTab = TagTabs.OVERVIEW } (default value)
  2. activeTab !== TagTabs.ASSETS (comparison in handleAssetSave)
  3. activeTabHandler(TagTabs.ASSETS) (setter call in handleAssetSave)

While the string values happen to be identical between both enums so this won't cause a runtime bug, mixing two enum types for the same variable reduces type safety and creates maintenance confusion. The TagTabs import could be removed entirely.

Suggested fix
Replace all remaining TagTabs references with EntityTabs:
- Line 118: `const { tab: activeTab = EntityTabs.OVERVIEW }`
- Line 402: `activeTab !== EntityTabs.ASSETS`
- Line 403: `activeTabHandler(EntityTabs.ASSETS)`
Then remove the TagTabs import.
✅ 5 resolved
Edge Case: Fixed height + overflow-y on all tab panes may cause double scrollbars

📄 openmetadata-ui/src/main/resources/ui/src/pages/TagPage/tag-page.less:22-23 📄 openmetadata-ui/src/main/resources/ui/src/pages/TagPage/TagPage.tsx:805-810
The new CSS in tag-page.less applies height: @tag-page-height; overflow-y: auto; to ALL .ant-tabs-tabpane children. However, the parent Col container in TagPage.tsx already sets overflowY: 'auto' and height: calc(100vh - 170px). This creates nested scrollable containers which can produce double scrollbars depending on the tab content (e.g., the Assets tab with ResizablePanels or the new DataQualityDashboard). The height calculation also differs between the CSS variable and the inline style, so the inner container may be taller or shorter than the outer one.

Quality: Persian (pr-pr.json) translations are copy-pasted Arabic

📄 openmetadata-ui/src/main/resources/ui/src/locale/languages/pr-pr.json:2229-2231 📄 openmetadata-ui/src/main/resources/ui/src/locale/languages/pr-pr.json:3131-3134
The new translation keys (data-health, incident-metrics, test-case-status, and all four *-sub-header messages) in pr-pr.json are identical to the Arabic (ar-sa.json) translations rather than actual Persian text. Persian uses a different script style and vocabulary. This will display Arabic text to Persian-speaking users.

Quality: Several languages leave data-dimensions untranslated as English

📄 openmetadata-ui/src/main/resources/ui/src/locale/languages/es-es.json:2228 📄 openmetadata-ui/src/main/resources/ui/src/locale/languages/fr-fr.json:2228 📄 openmetadata-ui/src/main/resources/ui/src/locale/languages/de-de.json:2228 📄 openmetadata-ui/src/main/resources/ui/src/locale/languages/ja-jp.json:2228 📄 openmetadata-ui/src/main/resources/ui/src/locale/languages/ru-ru.json:2228 📄 openmetadata-ui/src/main/resources/ui/src/locale/languages/he-he.json:2228 📄 openmetadata-ui/src/main/resources/ui/src/locale/languages/nl-nl.json:2228 📄 openmetadata-ui/src/main/resources/ui/src/locale/languages/th-th.json:2228 📄 openmetadata-ui/src/main/resources/ui/src/locale/languages/gl-es.json:2228
The data-dimensions label is left as the English string "Data Dimensions" in es-es, fr-fr, gl-es, he-he, ja-jp, nl-nl, pr-pr, ru-ru, th-th, and de-de locale files, while other keys in the same batch are properly translated. This appears to be an oversight in the translation pass.

Quality: Module-level DEFAULT_RANGE_DATA constant has stale timestamps

📄 openmetadata-ui/src/main/resources/ui/src/constants/DataQuality.constants.ts:94-99
In DataQuality.constants.ts (lines 94-98), DEFAULT_RANGE_DATA calls getCurrentMillis() and getEpochMillisForPastDays() at module load time. If the module is imported early (e.g., during app bootstrap) and the constant is used much later, endTs will be stale. The dashboard component already works around this by using a local useMemo, but exporting this as a constant is misleading—any future consumer would get stale values. Consider converting it to a factory function (getDefaultRangeData()) or removing the export if unused.

Bug: Default wildcard query becomes *** after wrapping

📄 openmetadata-ui/src/main/resources/ui/src/components/DataQuality/DataQualityDashboard/DataQualityDashboard.component.tsx:245 📄 openmetadata-ui/src/main/resources/ui/src/components/DataQuality/DataQualityDashboard/DataQualityDashboard.component.tsx:248 📄 openmetadata-ui/src/main/resources/ui/src/components/DataQuality/DataQualityDashboard/DataQualityDashboard.component.tsx:297 📄 openmetadata-ui/src/main/resources/ui/src/components/DataQuality/DataQualityDashboard/DataQualityDashboard.component.tsx:300
When fetchTagOptions or fetchGlossaryTermOptions are called without arguments, query defaults to WILD_CARD_CHAR ('*'), so the constructed query becomes *${'*'}****. While most search engines treat this the same as *, it's semantically unintended and could behave unexpectedly depending on the backend query parser.

Consider applying the wildcard wrapping only when the query is not already a wildcard:

🤖 Prompt for agents
Code Review: Adds multilingual translations for data dimensions, health, incident metrics, and test case status across the DataQualityDashboard and related UI components. Resolved issues with double scrollbars, Persian translation duplication, and stale timestamp constants; consider completing the TagTabs → EntityTabs migration in TagPage.tsx to maintain consistency.

1. 💡 Quality: Incomplete TagTabs → EntityTabs migration in TagPage.tsx
   Files: openmetadata-ui/src/main/resources/ui/src/pages/TagPage/TagPage.tsx:118, openmetadata-ui/src/main/resources/ui/src/pages/TagPage/TagPage.tsx:402-403

   The diff migrates several `TagTabs` references to `EntityTabs` in the tab definitions, but three usages of `TagTabs` remain in the same file:
   
   1. `const { tab: activeTab = TagTabs.OVERVIEW }` (default value)
   2. `activeTab !== TagTabs.ASSETS` (comparison in `handleAssetSave`)
   3. `activeTabHandler(TagTabs.ASSETS)` (setter call in `handleAssetSave`)
   
   While the string values happen to be identical between both enums so this won't cause a runtime bug, mixing two enum types for the same variable reduces type safety and creates maintenance confusion. The `TagTabs` import could be removed entirely.

   Suggested fix:
   Replace all remaining TagTabs references with EntityTabs:
   - Line 118: `const { tab: activeTab = EntityTabs.OVERVIEW }`
   - Line 402: `activeTab !== EntityTabs.ASSETS`
   - Line 403: `activeTabHandler(EntityTabs.ASSETS)`
   Then remove the TagTabs import.

Options

Auto-apply is off → Gitar will not commit updates to this branch.
Display: compact → Showing less information.

Comment with these commands to change:

Auto-apply Compact
gitar auto-apply:on         
gitar display:verbose         

Was this helpful? React with 👍 / 👎 | Gitar

@github-actions
Copy link
Contributor

Jest test Coverage

UI tests summary

Lines Statements Branches Functions
Coverage: 64%
65% (58648/90216) 44.76% (30877/68981) 47.91% (9302/19415)

@sonarqubecloud
Copy link

@github-actions
Copy link
Contributor

🟡 Playwright Results — all passed (21 flaky)

✅ 3395 passed · ❌ 0 failed · 🟡 21 flaky · ⏭️ 216 skipped

Shard Passed Failed Flaky Skipped
🟡 Shard 1 453 0 2 2
🟡 Shard 2 603 0 1 32
🟡 Shard 3 605 0 4 27
🟡 Shard 4 597 0 6 47
✅ Shard 5 587 0 0 67
🟡 Shard 6 550 0 8 41
🟡 21 flaky test(s) (passed on retry)
  • Features/CustomizeDetailPage.spec.ts › Glossary - customization should work (shard 1, 1 retry)
  • Pages/UserCreationWithPersona.spec.ts › Create user with persona and verify on profile (shard 1, 1 retry)
  • Features/BulkEditEntity.spec.ts › Glossary (shard 2, 1 retry)
  • Features/Permissions/GlossaryPermissions.spec.ts › Team-based permissions work correctly (shard 3, 1 retry)
  • Flow/ExploreDiscovery.spec.ts › Should display deleted assets when showDeleted is checked and deleted is not present in queryFilter (shard 3, 1 retry)
  • Flow/NotificationAlerts.spec.ts › Conversation source alert (shard 3, 1 retry)
  • Pages/Customproperties-part2.spec.ts › Entity Reference (shard 3, 1 retry)
  • Pages/Customproperties-part2.spec.ts › entityReferenceList shows item count, scrollable list, no expand toggle (shard 4, 1 retry)
  • Pages/DataContracts.spec.ts › Create Data Contract and validate for SearchIndex (shard 4, 1 retry)
  • Pages/DataContractsSemanticRules.spec.ts › Validate Description Rule Is_Set (shard 4, 1 retry)
  • Pages/Domains.spec.ts › Rename domain with data products attached at domain and subdomain levels (shard 4, 1 retry)
  • Pages/Domains.spec.ts › Rename domain with assets (tables, topics, dashboards) preserves associations (shard 4, 1 retry)
  • Pages/Domains.spec.ts › Domain Rbac (shard 4, 1 retry)
  • Pages/Glossary.spec.ts › Column dropdown drag-and-drop functionality for Glossary Terms table (shard 6, 2 retries)
  • Pages/Glossary.spec.ts › Create glossary with all optional fields (tags, owners, reviewers, domain) (shard 6, 1 retry)
  • Pages/Login.spec.ts › Refresh should work (shard 6, 1 retry)
  • Pages/ODCSImportExport.spec.ts › Multi-object ODCS contract - object selector shows all schema objects (shard 6, 1 retry)
  • Pages/ServiceEntity.spec.ts › Inactive Announcement create & delete (shard 6, 1 retry)
  • Pages/TagPageRightPanel.spec.ts › Should edit description from tag assets page context (shard 6, 1 retry)
  • Pages/UserDetails.spec.ts › Create team with domain and verify visibility of inherited domain in user profile after team removal (shard 6, 1 retry)
  • Pages/Users.spec.ts › Permissions for table details page for Data Consumer (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

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 UI UI specific issues

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants