Merge pull request #4826 from xyflow/fix/panel-ref

fix(panel): forward ref to inner panel div
This commit is contained in:
Moritz Klack
2024-12-04 10:45:01 +01:00
committed by GitHub
2 changed files with 22 additions and 14 deletions
+5
View File
@@ -0,0 +1,5 @@
---
'@xyflow/react': patch
---
Forward ref of the div inside Panel components.
@@ -1,4 +1,4 @@
import type { HTMLAttributes, ReactNode } from 'react'; import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';
import cc from 'classcat'; import cc from 'classcat';
import type { PanelPosition } from '@xyflow/system'; import type { PanelPosition } from '@xyflow/system';
@@ -15,7 +15,8 @@ export type PanelProps = HTMLAttributes<HTMLDivElement> & {
const selector = (s: ReactFlowState) => (s.userSelectionActive ? 'none' : 'all'); const selector = (s: ReactFlowState) => (s.userSelectionActive ? 'none' : 'all');
export function Panel({ position = 'top-left', children, className, style, ...rest }: PanelProps) { export const Panel = forwardRef<HTMLDivElement, PanelProps>(
({ position = 'top-left', children, className, style, ...rest }, ref) => {
const pointerEvents = useStore(selector); const pointerEvents = useStore(selector);
const positionClasses = `${position}`.split('-'); const positionClasses = `${position}`.split('-');
@@ -23,9 +24,11 @@ export function Panel({ position = 'top-left', children, className, style, ...re
<div <div
className={cc(['react-flow__panel', className, ...positionClasses])} className={cc(['react-flow__panel', className, ...positionClasses])}
style={{ ...style, pointerEvents }} style={{ ...style, pointerEvents }}
ref={ref}
{...rest} {...rest}
> >
{children} {children}
</div> </div>
); );
} }
);