Skip to content

fix(ui): scope empty-state placeholder styling per caller and add regression tests - #30553

Open
aniketkatkar97 wants to merge 3 commits into
mainfrom
fix/ingestion-empty-placeholder-styling
Open

fix(ui): scope empty-state placeholder styling per caller and add regression tests#30553
aniketkatkar97 wants to merge 3 commits into
mainfrom
fix/ingestion-empty-placeholder-styling

Conversation

@aniketkatkar97

@aniketkatkar97 aniketkatkar97 commented Jul 28, 2026

Copy link
Copy Markdown
Member

Describe your changes:

Fixes #30552

I worked on scoping the empty-state placeholder styling per caller because the shared getErrorPlaceHolder helper hardcoded the agents-card styling (tw:bg-primary tw:border tw:border-secondary tw:rounded-xl). Since the same helper renders the empty state for both the service Agents tab and the Ingestion pipelines list table, that card styling leaked into the list-table empty state and rendered an unwanted bordered card — a visual regression introduced by #30284.

getErrorPlaceHolder now accepts an optional className that each caller passes: the Agents tab keeps the card styling, while the ingestion list table uses a plain tw:relative tw:py-8 layout.

Regression coverage added:

  • IngestionUtils.test.tsx — unit tests for getErrorPlaceHolder asserting the className is forwarded to the placeholder and that the card classes never leak to a caller that did not pass them.
  • MetadataAgentsView.test.tsx / IngestionListTable.test.tsx — call-site guards pinning the exact className each surface passes.

Proven RED/GREEN: re-hardcoding the old className turns the helper tests red; the fix keeps them green.

Screenshots

Agents tab — empty state keeps the card (intended):

Screenshot 2026-07-28 at 12 59 17 PM

Ingestion Pipelines list table — empty state is plain, no leaked card border (the fix):

Screenshot 2026-07-28 at 12 59 27 PM

Type of change:

  • Bug fix

Checklist:

  • I have read the CONTRIBUTING document.
  • My PR includes tests to cover the changes.

Greptile Summary

Scopes shared empty-state styling to each caller.

  • Adds an optional className parameter to getErrorPlaceHolder.
  • Preserves card styling for the Agents tab while using a plain layout for the ingestion table.
  • Adds helper-level and caller-level regression tests for both styling variants.

Confidence Score: 5/5

The PR appears safe to merge.

No blocking failure remains.

Important Files Changed

Filename Overview
openmetadata-ui/src/main/resources/ui/src/utils/IngestionUtils.tsx Forwards an optional caller-provided class name to the shared empty-state component.
openmetadata-ui/src/main/resources/ui/src/components/ServiceAgents/components/MetadataAgentsView.component.tsx Explicitly retains the intended bordered-card styling for the Agents empty state.
openmetadata-ui/src/main/resources/ui/src/components/Settings/Services/Ingestion/IngestionListTable/IngestionListTable.tsx Applies a plain padded layout to the ingestion-table empty state.
openmetadata-ui/src/main/resources/ui/src/utils/IngestionUtils.test.tsx Verifies class forwarding and prevents Agents-specific card classes from leaking to other callers.
openmetadata-ui/src/main/resources/ui/src/components/ServiceAgents/components/MetadataAgentsView.test.tsx Pins the Agents caller to its intended empty-state styling.
openmetadata-ui/src/main/resources/ui/src/components/Settings/Services/Ingestion/IngestionListTable/IngestionListTable.test.tsx Pins the ingestion-table caller to its intended plain empty-state styling.

Reviews (3): Last reviewed commit: "Merge branch 'main' into fix/ingestion-e..." | Re-trigger Greptile

getErrorPlaceHolder hardcoded the agents-card styling
(tw:bg-primary tw:border tw:border-secondary tw:rounded-xl), which leaked
into the ingestion pipelines list-table empty state and rendered an unwanted
bordered card (regression from #30284). The helper now takes an optional
className each caller passes: the Agents tab keeps the card, the ingestion
table uses a plain tw:relative tw:py-8 layout.

Adds regression coverage: getErrorPlaceHolder unit tests asserting the
className is forwarded and the card classes never leak to a caller that did
not ask for them, plus call-site guards in MetadataAgentsView and
IngestionListTable pinning the className each passes.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@aniketkatkar97
aniketkatkar97 requested a review from a team as a code owner July 28, 2026 08:02
Copilot AI review requested due to automatic review settings July 28, 2026 08:02

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.

@github-actions github-actions Bot added safe to test Add this label to run secure Github workflows on PRs UI UI specific issues labels Jul 28, 2026
@aniketkatkar97 aniketkatkar97 self-assigned this Jul 28, 2026
@open-metadata open-metadata deleted a comment from github-actions Bot Jul 28, 2026
Copilot AI review requested due to automatic review settings July 28, 2026 08:12

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.

@github-actions

Copy link
Copy Markdown
Contributor

Jest test Coverage

UI tests summary

Lines Statements Branches Functions
Coverage: 65%
65.67% (76801/116936) 49.54% (46114/93066) 50.76% (13892/27365)

@aniketkatkar97 aniketkatkar97 added the To release Will cherry-pick this PR into the release branch label Jul 28, 2026
@aniketkatkar97
aniketkatkar97 enabled auto-merge July 28, 2026 09:20
@open-metadata open-metadata deleted a comment from github-actions Bot Jul 28, 2026
@aniketkatkar97
aniketkatkar97 disabled auto-merge July 28, 2026 10:26
Copilot AI review requested due to automatic review settings July 28, 2026 11:22

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.

@gitar-bot

gitar-bot Bot commented Jul 28, 2026

Copy link
Copy Markdown
Code Review ✅ Approved

Scopes empty-state placeholder styling per caller by accepting an optional className in getErrorPlaceHolder to prevent card styling leakage on the ingestion list table. No issues found.

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

@sonarqubecloud

Copy link
Copy Markdown

@github-actions

Copy link
Copy Markdown
Contributor

✅ Playwright Results — workflow succeeded

Validated commit d587a3d15b794c937a7b0901f81b65aaa3e35d15 in Playwright run 30354539769, attempt 1.

✅ 618 passed · ❌ 0 failed · 🟡 0 flaky · ⏭️ 5 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) 57m 43s

⏱️ Max setup 3m 5s · max shard execution 15m 0s · max shard-job elapsed before upload 26m 40s · reporting 4s

🌐 208.81 requests/attempt · 2.77 app boots/UI scenario · 10.67% common-shard skew

Optimization targets still in progress:

  • Browser traffic was 208.81 requests per attempt (convergence target: fewer than 200).
  • Application boot ratio was 2.77 per UI scenario (1799 boots / 650 scenarios; convergence target: at most 1).
Shard Passed Failed Flaky Skipped Lifecycle failed Lifecycle flaky
✅ Shard chromium-01 110 0 0 0 0 0
✅ Shard chromium-02 109 0 0 0 0 0
✅ Shard chromium-03 111 0 0 3 0 0
✅ Shard chromium-04 90 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 23 0 0 0 0 0
✅ Shard ingestion-01 39 0 0 0 0 0
✅ Shard ingestion-02 22 0 0 0 0 0
✅ Shard reindex-01 2 0 0 0 0 0
✅ Shard search-01 10 0 0 0 0 0
✅ Shard search-rbac-01 27 0 0 2 0 0

📦 Download artifacts

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

@aniketkatkar97
aniketkatkar97 added this pull request to the merge queue Jul 28, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Jul 28, 2026
@aniketkatkar97
aniketkatkar97 added this pull request to the merge queue Jul 28, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Jul 28, 2026
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 To release Will cherry-pick this PR into the release branch UI UI specific issues

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Empty-state placeholder card styling leaks into the Ingestion pipelines list table

4 participants