Skip to content

Fix(ui): empty state domain dataproduct - #31690

Merged
Rohit0301 merged 8 commits into
mainfrom
fix/empty-state-domain-dataproduct
Aug 19, 2026
Merged

Fix(ui): empty state domain dataproduct#31690
Rohit0301 merged 8 commits into
mainfrom
fix/empty-state-domain-dataproduct

Conversation

@Rohit0301

@Rohit0301 Rohit0301 commented Aug 18, 2026

Copy link
Copy Markdown
Contributor

Describe your changes:

Screenshot 2026-08-18 at 4 21 24 PM Screenshot 2026-08-18 at 4 21 29 PM

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

High-level design:

N/A — small change.

Tests:

Use cases covered

Unit tests

Backend integration tests

Ingestion integration tests

Playwright (UI) tests

Manual testing performed

UI screen recording / screenshots:

Not applicable.

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.

Greptile Summary

The PR replaces domain and data-product empty states with the UI-core placeholder components and updates Playwright coverage and impact mapping.

  • Adds permission-gated creation actions to the new empty states.
  • Adds a filtered-results clear action for both listings.
  • Updates the data-product empty-state Playwright selector.

Confidence Score: 4/5

The PR is not yet safe to merge because Clear Filters can leave the search query active and preserve the empty result.

The “fixed” and “already fixed” replies from the unnamed thread author are contradicted by current HEAD: both listing actions still issue separate search and filter navigations, while the shared URL hook provides a single resetAll transition that would clear both atomically.

Files Needing Attention: openmetadata-ui/src/main/resources/ui/src/components/DataProduct/DataProductListPage.tsx and openmetadata-ui/src/main/resources/ui/src/components/DomainListing/DomainListPage.tsx

Important Files Changed

Filename Overview
openmetadata-ui/src/main/resources/ui/src/components/DataProduct/DataProductListPage.tsx Replaces both empty-state variants, but the clear action still performs non-composing search and filter URL updates.
openmetadata-ui/src/main/resources/ui/src/components/DomainListing/DomainListPage.tsx Adopts the new domain placeholders and retains the same sequential clear-action defect.
openmetadata-ui/src/main/resources/ui/playwright/e2e/Pages/DataProducts.spec.ts Updates the empty-state add-action selector to target the button inside the new placeholder.
.github/playwright/impact-map.json Extends data-product test impact coverage to the component directories changed by this PR.

Reviews (6): Last reviewed commit: "lint fix" | Re-trigger Greptile

Greptile also left 1 inline comment on this PR.

Context used:

@Rohit0301 Rohit0301 self-assigned this Aug 18, 2026
@Rohit0301 Rohit0301 added the safe to test Add this label to run secure Github workflows on PRs label Aug 18, 2026
@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 the UI UI specific issues label Aug 18, 2026
"no-data-assets-to-display": "لا توجد أصول بيانات لعرضها",
"no-data-found": "لم يتم العثور على بيانات",
"no-data-products-yet": "لا توجد منتجات بيانات بعد",
"no-data-products-yet-description": "Create your first data product to make trusted datasets available for discovery and access.",

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.

P1 Locale placeholders remain in English

The new description is identical to the en-US source in all 19 changed non-English bundles, causing the translation validation gate to fail and displaying English empty-state copy for those locales. Replace these synchronized placeholders with real translations; the same pattern occurs in the other changed locale files.

Context Used: CLAUDE.md (source)

@Rohit0301
Rohit0301 force-pushed the fix/empty-state-domain-dataproduct branch from e087061 to 215b66d Compare August 18, 2026 11:05
Comment thread openmetadata-ui/src/main/resources/ui/src/locale/languages/pr-pr.json Outdated
@github-actions

github-actions Bot commented Aug 18, 2026

Copy link
Copy Markdown
Contributor

Jest test Coverage

UI tests summary

Lines Statements Branches Functions
Coverage: 66%
66.85% (79927/119550) 51.25% (48778/95164) 52.24% (14611/27966)

@github-actions

github-actions Bot commented Aug 18, 2026

Copy link
Copy Markdown
Contributor

✅ Playwright Results — workflow succeeded

Validated commit 29f7b0478374d9a3689b97d58daa933eacd578ea in Playwright run 32148668434, attempt 1.

✅ 751 passed · ❌ 0 failed · 🟡 1 flaky · ⏭️ 0 skipped · 🧰 0 lifecycle flaky

Performance

Blocking targets: ✅ met · Optimization targets: 🟡 in progress

Shard-job maxima below are not the full workflow wall time; the linked run includes build, fixture, planning, and reporting.

🕒 Full workflow signal wall (to summary) 54m 40s

⏱️ Max setup 3m 38s · max shard execution 20m 43s · max shard-job elapsed before upload 24m 29s · reporting 6s

🌐 217.03 requests/attempt · 2.71 app boots/UI scenario · 10.38% common-shard skew

Optimization targets still in progress:

  • Browser traffic was 217.03 requests per attempt (convergence target: fewer than 200).
  • Application boot ratio was 2.71 per UI scenario (2109 boots / 777 scenarios; convergence target: at most 1).
Shard Passed Failed Flaky Skipped Lifecycle failed Lifecycle flaky
🟡 Shard chromium-01 167 0 1 0 0 0
✅ Shard chromium-02 153 0 0 0 0 0
✅ Shard chromium-03 142 0 0 0 0 0
✅ Shard chromium-04 136 0 0 0 0 0
✅ Shard data-asset-rules-01 61 0 0 0 0 0
✅ Shard domain-isolation-01 14 0 0 0 0 0
✅ Shard global-state-01 34 0 0 0 0 0
✅ Shard ingestion-01 1 0 0 0 0 0
✅ Shard reindex-01 3 0 0 0 0 0
✅ Shard search-01 11 0 0 0 0 0
✅ Shard search-rbac-01 29 0 0 0 0 0
🟡 1 flaky test(s) (passed on retry)
  • Pages/DomainUIInteractions.spec.tsDelete domain with subdomains shows warning (shard chromium-01, 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

@github-actions

Copy link
Copy Markdown
Contributor

⚠️ UI Checkstyle passed — lint findings in changed files

🔍 ESLint findings in this PR's files — 0 error(s), 7 warning(s)

Errors block the build. Warnings do not yet — they are rules whose backlog is still
being worked down, listed so this PR does not add to it. See docs/ui-code-quality-gate.md.

0 error(s), 7 warning(s) across 2 changed file(s).

Count Rule
3 sonarjs/cyclomatic-complexity
2 sonarjs/no-duplicate-string
2 react-hooks/exhaustive-deps
All findings
Location Rule Message
🟡 src/components/DataProduct/DataProductListPage.tsx:69:30 sonarjs/cyclomatic-complexity {"message":"Function has a complexity of 12 which is greater than 10 authorized.","cost":2,"secondaryLocations":[{"line":69,"column":29,"endLine":69,"endColumn"
🟡 src/components/DataProduct/DataProductListPage.tsx:141:15 sonarjs/no-duplicate-string Define a constant instead of duplicating this literal 4 times.
🟡 src/components/DataProduct/DataProductListPage.tsx:162:56 sonarjs/cyclomatic-complexity {"message":"Function has a complexity of 13 which is greater than 10 authorized.","cost":3,"secondaryLocations":[{"line":162,"column":55,"endLine":162,"endColum
🟡 src/components/DataProduct/DataProductListPage.tsx:363:6 react-hooks/exhaustive-deps React Hook useMemo has missing dependencies: 'dataProductColumns' and 'dataProductListing'. Either include them or remove the dependency array.
🟡 src/components/DomainListing/DomainListPage.tsx:51:68 sonarjs/cyclomatic-complexity {"message":"Function has a complexity of 13 which is greater than 10 authorized.","cost":3,"secondaryLocations":[{"line":51,"column":67,"endLine":51,"endColumn"
🟡 src/components/DomainListing/DomainListPage.tsx:125:15 sonarjs/no-duplicate-string Define a constant instead of duplicating this literal 3 times.
🟡 src/components/DomainListing/DomainListPage.tsx:255:6 react-hooks/exhaustive-deps React Hook useMemo has missing dependencies: 'domainColumns' and 'domainListing'. Either include them or remove the dependency array.

Fix locally (fast - only checks files changed in this branch):

make ui-checkstyle-changed

@sonarqubecloud

Copy link
Copy Markdown

@Rohit0301
Rohit0301 added this pull request to the merge queue Aug 18, 2026
Merged via the queue into main with commit b2634db Aug 19, 2026
94 of 98 checks passed
@Rohit0301
Rohit0301 deleted the fix/empty-state-domain-dataproduct branch August 19, 2026 11:51
@gitar-bot

gitar-bot Bot commented Aug 19, 2026

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

Replaces generic empty-state placeholders with context-specific messages and icons across Domain and Data Product listing pages. Resolved the untranslated locale keys, incomplete filter-clearing behavior, and unused label keys.

✅ 4 resolved
Quality: no-data-products-yet-description untranslated in all locales

📄 openmetadata-ui/src/main/resources/ui/src/locale/languages/ar-sa.json:1686 📄 openmetadata-ui/src/main/resources/ui/src/locale/languages/de-de.json:1686 📄 openmetadata-ui/src/main/resources/ui/src/locale/languages/he-he.json:1686 📄 openmetadata-ui/src/main/resources/ui/src/locale/languages/ko-kr.json:1686 📄 openmetadata-ui/src/main/resources/ui/src/locale/languages/mr-in.json:1686 📄 openmetadata-ui/src/main/resources/ui/src/locale/languages/ru-ru.json:1686
The new no-data-products-yet-description key was added to every non-English locale bundle with the raw English string ("Create your first data product to make trusted datasets available for discovery and access."), whereas the sibling no-domains-yet-desc key was properly localized in each file. Users of non-English locales will see untranslated copy, and this is inconsistent with the localized domain description. Provide translated values for each locale bundle.

Bug: Clear-filters action ignores active quick filters

📄 openmetadata-ui/src/main/resources/ui/src/components/DomainListing/DomainListPage.tsx:208-210 📄 openmetadata-ui/src/main/resources/ui/src/components/DataProduct/DataProductListPage.tsx:315-317
The empty state shown when isSearchOrFilterActive() is true can be triggered by either search text OR quick/facet filters, but onClearFilters={() => handleSearchChange('')} only resets the search query. When the listing is emptied solely by an active quick filter, clicking "Clear filters" does nothing and the user cannot recover the list. Also reset the quick filters (e.g. call handleFilterChange([])) in the same handler alongside handleSearchChange('').

Bug: Clear-filters action leaves quick filters active

📄 openmetadata-ui/src/main/resources/ui/src/components/DomainListing/DomainListPage.tsx:175-182 📄 openmetadata-ui/src/main/resources/ui/src/components/DataProduct/DataProductListPage.tsx:281-288
The empty state is shown when hasActiveSearchOrFilter is true, which includes active quick filters, but onClearFilters only calls handleSearchChange('') and never clears urlState.filters via handleFilterChange([]). When a listing is emptied by quick filters (not search), clicking Clear does nothing and the user is stuck on the empty state. Reset both search and filters in the handler.

Quality: Unused label.no-domains-yet-description key added to all locales

📄 openmetadata-ui/src/main/resources/ui/src/locale/languages/en-us.json:1698 📄 openmetadata-ui/src/main/resources/ui/src/components/DomainListing/DomainListPage.tsx:203
This PR adds label.no-domains-yet-description across all 20 locale bundles, but DomainListPage renders the domain empty-state description via t('message.no-domains-yet-desc') (a pre-existing key), so the new label key is never referenced. Either point the component at the new key or drop the redundant no-domains-yet-description additions to avoid dead translation entries.

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 👍 / 👎 | Powered by Gitar — free for open source

Rohit0301 added a commit that referenced this pull request Aug 19, 2026
* fix(ui): replace generic empty-state placeholders with context-specific messages in AI mode

* updated the empty placholder

* added empty state icons

* lint fix

* addressed gitar comment

* update imapact.json

* playwright fix

* lint fix
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.

3 participants