Repository navigation
Fixes #35369: keep include-column & metrics dropdowns outside the scroll wrapper - #35370
Conversation
|
Hi there 👋 Thanks for your contribution! The OpenMetadata team will review the PR shortly! Once it has been labeled as Let us know if you need any help! |
shah-harshit
left a comment
There was a problem hiding this comment.
Standards: 2 findings. Worst: popup container found through a data-testid selector with a silent document.body fallback. Also a test-only data-testid in production markup.
Spec (#35369): 2 findings. Worst: superseded by #35190 (core Select.ComboBox/TreeSelect portal their popovers, so no clipping), so coordinate merge order. Also unverified scroll-while-open alignment, and tests that check ancestry rather than clipping.
CI: authorize fails because the PR has no safe to test label (it's from detail-app); ui-coverage(-tests), ui-sonar-gate, java-checkstyle and maven-collate-ci fail as a result. That's not a code issue: a maintainer needs to add the label.
Find the popup container through a ref on the include section instead of the dialog's data-testid. The section sits outside the 160px clip box but inside the drawer's scroll body, so an open popup scrolls with its field, and a renamed test id can no longer fall back to document.body. Drop the test-only data-testid on the metrics TreeSelect, and fix the new tests, which clicked a .include-columns-add-button class that does not exist and so never ran.
|
Hi there 👋 Thanks for your contribution! The OpenMetadata team will review the PR shortly! Once it has been labeled as Let us know if you need any help! |
|
Re: #35370 (review) — All five findings were addressed in c9b1699: the |
…mn-metrics-dropdowns-b4cf4d
|
| Count | Rule |
|---|---|
| 9 | react-hooks/exhaustive-deps |
All findings
| Location | Rule | Message | |
|---|---|---|---|
| 🟡 | src/components/Database/Profiler/TableProfiler/ProfilerSettingsModal/ProfilerSettingsModal.tsx:148:6 |
react-hooks/exhaustive-deps |
React Hook useMemo has a missing dependency: 't'. Either include it or remove the dependency array. |
| 🟡 | src/components/Database/Profiler/TableProfiler/ProfilerSettingsModal/ProfilerSettingsModal.tsx:165:6 |
react-hooks/exhaustive-deps |
React Hook useMemo has a missing dependency: 't'. Either include it or remove the dependency array. |
| 🟡 | src/components/Database/Profiler/TableProfiler/ProfilerSettingsModal/ProfilerSettingsModal.tsx:413:5 |
react-hooks/exhaustive-deps |
React Hook useCallback has missing dependencies: 'onVisibilityChange', 't', and 'tableId'. Either include them or remove the dependency array. If 'onVisibilityC |
| 🟡 | src/components/Database/Profiler/TableProfiler/ProfilerSettingsModal/ProfilerSettingsModal.tsx:420:6 |
react-hooks/exhaustive-deps |
React Hook useCallback has missing dependencies: 'onVisibilityChange' and 'updateInitialConfig'. Either include them or remove the dependency array. If 'onVisib |
| 🟡 | src/components/Database/Profiler/TableProfiler/ProfilerSettingsModal/ProfilerSettingsModal.tsx:427:5 |
react-hooks/exhaustive-deps |
React Hook useCallback has a missing dependency: 'handleStateChange'. Either include it or remove the dependency array. |
| 🟡 | src/components/Database/Profiler/TableProfiler/ProfilerSettingsModal/ProfilerSettingsModal.tsx:435:5 |
react-hooks/exhaustive-deps |
React Hook useCallback has a missing dependency: 'handleStateChange'. Either include it or remove the dependency array. |
| 🟡 | src/components/Database/Profiler/TableProfiler/ProfilerSettingsModal/ProfilerSettingsModal.tsx:442:6 |
react-hooks/exhaustive-deps |
React Hook useCallback has a missing dependency: 'handleStateChange'. Either include it or remove the dependency array. |
| 🟡 | src/components/Database/Profiler/TableProfiler/ProfilerSettingsModal/ProfilerSettingsModal.tsx:467:5 |
react-hooks/exhaustive-deps |
React Hook useCallback has missing dependencies: 'form' and 'handleStateChange'. Either include them or remove the dependency array. |
| 🟡 | src/components/Database/Profiler/TableProfiler/ProfilerSettingsModal/ProfilerSettingsModal.tsx:487:6 |
react-hooks/exhaustive-deps |
React Hook useEffect has a missing dependency: 'fetchProfileConfig'. Either include it or remove the dependency array. |
Fix locally (fast - only checks files changed in this branch):
make ui-checkstyle-changed
|
…sic-observability-antd-free Conflict in ProfilerSettingsModal.tsx with #35370 (keep include-column and metrics dropdowns outside the scroll wrapper): kept this branch's core react-hook-form version. #35370 fixed antd getPopupContainer, which no longer exists here; the core pickers open in a react-aria popover outside the include-column scroll box. Its three antd popup-container tests are replaced by one test asserting that on the core version.



Detail bug report: View on Detail
Describe your changes:
Fixes #35369
I worked on the table profiler Settings drawer (
ProfilerSettingsModal) because the include-columnSelectand per-column metricsTreeSelectpopups were being clipped to a 160px-tall nested scroll box whenever the user had 2+ include-column rows, making the dropdown options unreachable without scrolling inside that tiny box.Type of change:
High-level design:
N/A — small change.
Tests:
Use cases covered
Selectshows all column options — not clipped to the 160px include-column box.TreeSelectshows all metrics under "All" — not clipped.SlideoutMenudialog (react-aria focus/accessibility boundary preserved — no regression to thedocument.bodyportal the original commit deliberately removed).Unit tests
openmetadata-ui/src/main/resources/ui/src/components/Database/Profiler/TableProfiler/ProfilerSettingsModal/ProfilerSettingsModal.test.tsxProfilerSettingsModal include-column dropdown popup containerasserting DOM ancestry of the open popups (the proxy for visual clipping, since jsdom does no layout): the two row-picker popups must mount inside the dialog but outside[data-testid="include-column-container"]; a control test confirms the non-rowprofile-sampleSelect still mounts inside the dialog. All 22 tests in the file pass (19 pre-existing + 3 new — no regression).data-testid="include-column-metrics"was added to the metricsTreeSelectto make it reachable in tests (the include-columnSelectalready had one).Backend integration tests
Ingestion integration tests
Playwright (UI) tests
playwright/e2e/Features/DataQuality/Profiler.spec.ts, and this change is purely popup-container wiring with no payload-shape impact).Manual testing performed
Received: <div class="h-max-40 overflow-y-auto" data-testid="include-column-container">), proving the tests catch the regression and it is scoped to the two row pickers.yarn ui-checkstyle:changed <files>) — ESLint, Prettier, organize-imports, license-header, i18n, app-docs, tw-audit and tw-deprecation-guard all clean (0 errors).tsc --noEmit— no type errors in the changed files.Profiler.spec.tsand a live-UI manual check (verifying dropdown options render fully when 2+ include rows exist) could not be run: they require a live OpenMetadata server on :8585, which needs Docker for MySQL + Elasticsearch. The Docker daemon could not start in this environment (failed to start daemon: Error initializing network controller: error obtaining controller instance: timeout). I installed the Playwright Chromium browser and its OS shared libraries — the browser launches, but the suite aborts at setup withECONNREFUSED ::1:8585on/auth/login. Since the fix changes only popup-mounting wiring (no form/state serialization), the existing Playwright round-trip assertion on the PUT payload is unaffected.UI screen recording:
Not applicable — standalone bug fix (a clipping regression in the profiler settings modal). The fix is DOM-portal wiring only and is covered by unit tests asserting popup ancestry; no feature surface or visual flow changed beyond restoring the pre-regression dropdown behaviour.
Checklist:
Fixes <issue-number>: <short explanation>Fixes #<issue-number>above.docs/decisions/(see itsREADME.md). This description is gone fromgit logafter the squash-merge.Automatic Fixes PRs can be configured here.