From bf4840dea159098f7bb5c11dafd4e705d5f0ff64 Mon Sep 17 00:00:00 2001 From: Mehmet Salih Yavuz Date: Thu, 14 May 2026 16:23:33 +0300 Subject: [PATCH] fix(react18): forwardRef Popover wrapper, wrap explore popover trigger children in span - Popover (superset-ui-core): forward refs to antd Popover so consumers that pass it as a trigger child can attach a DOM ref without triggering findDOMNode. - Explore popover triggers (ColorBreakpoint, Contour, DndColumnSelect, AdhocFilter): the popover children are arbitrary user nodes which are often function components without forwardRef. Wrapping them in a span gives antd's resize observer a real DOM ref to attach, eliminating the React 18 deprecation warning. --- .../superset-ui-core/src/components/Popover/index.tsx | 7 +++++-- .../ColorBreakpointPopoverTrigger.tsx | 4 +++- .../controls/ContourControl/ContourPopoverTrigger.tsx | 4 +++- .../DndColumnSelectControl/ColumnSelectPopoverTrigger.tsx | 4 +++- .../FilterControl/AdhocFilterPopoverTrigger/index.tsx | 4 +++- 5 files changed, 17 insertions(+), 6 deletions(-) diff --git a/superset-frontend/packages/superset-ui-core/src/components/Popover/index.tsx b/superset-frontend/packages/superset-ui-core/src/components/Popover/index.tsx index f7e41b5be62..d0609c4387d 100644 --- a/superset-frontend/packages/superset-ui-core/src/components/Popover/index.tsx +++ b/superset-frontend/packages/superset-ui-core/src/components/Popover/index.tsx @@ -16,11 +16,14 @@ * specific language governing permissions and limitations * under the License. */ -import { Popover as AntdPopover } from 'antd'; +import { forwardRef } from 'react'; +import { Popover as AntdPopover, type TooltipRef } from 'antd'; import { PopoverProps as AntdPopoverProps } from 'antd/es/popover'; export interface PopoverProps extends AntdPopoverProps { forceRender?: boolean; } -export const Popover = (props: PopoverProps) => ; +export const Popover = forwardRef((props, ref) => ( + +)); diff --git a/superset-frontend/src/explore/components/controls/ColorBreakpointsControl/ColorBreakpointPopoverTrigger.tsx b/superset-frontend/src/explore/components/controls/ColorBreakpointsControl/ColorBreakpointPopoverTrigger.tsx index f4b85dd631b..7b66f9da812 100644 --- a/superset-frontend/src/explore/components/controls/ColorBreakpointsControl/ColorBreakpointPopoverTrigger.tsx +++ b/superset-frontend/src/explore/components/controls/ColorBreakpointsControl/ColorBreakpointPopoverTrigger.tsx @@ -54,7 +54,9 @@ const ColorBreakpointsPopoverTrigger = ({ onOpenChange={setVisibility} destroyOnHidden > - {props.children} + {/* Wrap in span so the Popover can attach a ref without relying + on findDOMNode (deprecated in React 18+). */} + {props.children} ); }; diff --git a/superset-frontend/src/explore/components/controls/ContourControl/ContourPopoverTrigger.tsx b/superset-frontend/src/explore/components/controls/ContourControl/ContourPopoverTrigger.tsx index 69e4b90fefe..8ab8b29da13 100644 --- a/superset-frontend/src/explore/components/controls/ContourControl/ContourPopoverTrigger.tsx +++ b/superset-frontend/src/explore/components/controls/ContourControl/ContourPopoverTrigger.tsx @@ -52,7 +52,9 @@ const ContourPopoverTrigger = ({ onOpenChange={setVisibility} destroyOnHidden > - {props.children} + {/* Wrap in span so the Popover can attach a ref without relying + on findDOMNode (deprecated in React 18+). */} + {props.children} ); }; diff --git a/superset-frontend/src/explore/components/controls/DndColumnSelectControl/ColumnSelectPopoverTrigger.tsx b/superset-frontend/src/explore/components/controls/DndColumnSelectControl/ColumnSelectPopoverTrigger.tsx index cf8692b7503..19cf507d256 100644 --- a/superset-frontend/src/explore/components/controls/DndColumnSelectControl/ColumnSelectPopoverTrigger.tsx +++ b/superset-frontend/src/explore/components/controls/DndColumnSelectControl/ColumnSelectPopoverTrigger.tsx @@ -201,7 +201,9 @@ const ColumnSelectPopoverTriggerInner = ({ title={popoverTitle} destroyOnHidden > - {children} + {/* Wrap in span so the Popover can attach a ref without relying + on findDOMNode (deprecated in React 18+). */} + {children} ); diff --git a/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterPopoverTrigger/index.tsx b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterPopoverTrigger/index.tsx index ead19ecd5e9..f7708ec676f 100644 --- a/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterPopoverTrigger/index.tsx +++ b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterPopoverTrigger/index.tsx @@ -112,7 +112,9 @@ class AdhocFilterPopoverTrigger extends PureComponent< onOpenChange={togglePopover} destroyOnHidden > - {this.props.children} + {/* Wrap in span so the Popover can attach a ref without relying + on findDOMNode (deprecated in React 18+). */} + {this.props.children} ); }