pass through NodeType to connectionLineComponent ReactFlow prop

This commit is contained in:
Solomon Astley
2024-12-15 11:45:04 -08:00
parent 0f21ec21eb
commit cde899c5be
3 changed files with 14 additions and 9 deletions
+5
View File
@@ -0,0 +1,5 @@
---
'@xyflow/react': minor
---
Pass `NodeType` type argument from `ReactFlowProps` to `connectionLineComponent` property.
@@ -11,12 +11,12 @@ import {
import { useStore } from '../../hooks/useStore'; import { useStore } from '../../hooks/useStore';
import { getSimpleBezierPath } from '../Edges/SimpleBezierEdge'; import { getSimpleBezierPath } from '../Edges/SimpleBezierEdge';
import type { ConnectionLineComponent, ReactFlowState } from '../../types'; import type { ConnectionLineComponent, Node, ReactFlowState } from '../../types';
import { useConnection } from '../../hooks/useConnection'; import { useConnection } from '../../hooks/useConnection';
type ConnectionLineWrapperProps = { type ConnectionLineWrapperProps<NodeType extends Node = Node> = {
type: ConnectionLineType; type: ConnectionLineType;
component?: ConnectionLineComponent; component?: ConnectionLineComponent<NodeType>;
containerStyle?: CSSProperties; containerStyle?: CSSProperties;
style?: CSSProperties; style?: CSSProperties;
}; };
@@ -29,7 +29,7 @@ const selector = (s: ReactFlowState) => ({
height: s.height, height: s.height,
}); });
export function ConnectionLineWrapper({ containerStyle, style, type, component }: ConnectionLineWrapperProps) { export function ConnectionLineWrapper<NodeType extends Node = Node>({ containerStyle, style, type, component }: ConnectionLineWrapperProps<NodeType>) {
const { nodesConnectable, width, height, isValid, inProgress } = useStore(selector, shallow); const { nodesConnectable, width, height, isValid, inProgress } = useStore(selector, shallow);
const renderConnection = !!(width && nodesConnectable && inProgress); const renderConnection = !!(width && nodesConnectable && inProgress);
@@ -51,15 +51,15 @@ export function ConnectionLineWrapper({ containerStyle, style, type, component }
); );
} }
type ConnectionLineProps = { type ConnectionLineProps<NodeType extends Node = Node> = {
type: ConnectionLineType; type: ConnectionLineType;
style?: CSSProperties; style?: CSSProperties;
CustomComponent?: ConnectionLineComponent; CustomComponent?: ConnectionLineComponent<NodeType>;
isValid: boolean | null; isValid: boolean | null;
}; };
const ConnectionLine = ({ style, type = ConnectionLineType.Bezier, CustomComponent, isValid }: ConnectionLineProps) => { const ConnectionLine = <NodeType extends Node = Node> ({ style, type = ConnectionLineType.Bezier, CustomComponent, isValid }: ConnectionLineProps<NodeType>) => {
const { inProgress, from, fromNode, fromHandle, fromPosition, to, toNode, toHandle, toPosition } = useConnection(); const { inProgress, from, fromNode, fromHandle, fromPosition, to, toNode, toHandle, toPosition } = useConnection<NodeType>();
if (!inProgress) { if (!inProgress) {
return; return;
+1 -1
View File
@@ -259,7 +259,7 @@ export interface ReactFlowProps<NodeType extends Node = Node, EdgeType extends E
/** Styles to be applied to the connection line */ /** Styles to be applied to the connection line */
connectionLineStyle?: CSSProperties; connectionLineStyle?: CSSProperties;
/** React Component to be used as a connection line */ /** React Component to be used as a connection line */
connectionLineComponent?: ConnectionLineComponent; connectionLineComponent?: ConnectionLineComponent<NodeType>;
/** Styles to be applied to the container of the connection line */ /** Styles to be applied to the container of the connection line */
connectionLineContainerStyle?: CSSProperties; connectionLineContainerStyle?: CSSProperties;
/** 'strict' connection mode will only allow you to connect source handles to target handles. /** 'strict' connection mode will only allow you to connect source handles to target handles.