|
|
|
@@ -11,12 +11,12 @@ import {
|
|
|
|
|
|
|
|
|
|
import { useStore } from '../../hooks/useStore';
|
|
|
|
|
import { getSimpleBezierPath } from '../Edges/SimpleBezierEdge';
|
|
|
|
|
import type { ConnectionLineComponent, ReactFlowState } from '../../types';
|
|
|
|
|
import type { ConnectionLineComponent, Node, ReactFlowState } from '../../types';
|
|
|
|
|
import { useConnection } from '../../hooks/useConnection';
|
|
|
|
|
|
|
|
|
|
type ConnectionLineWrapperProps = {
|
|
|
|
|
type ConnectionLineWrapperProps<NodeType extends Node = Node> = {
|
|
|
|
|
type: ConnectionLineType;
|
|
|
|
|
component?: ConnectionLineComponent;
|
|
|
|
|
component?: ConnectionLineComponent<NodeType>;
|
|
|
|
|
containerStyle?: CSSProperties;
|
|
|
|
|
style?: CSSProperties;
|
|
|
|
|
};
|
|
|
|
@@ -29,7 +29,12 @@ const selector = (s: ReactFlowState) => ({
|
|
|
|
|
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 renderConnection = !!(width && nodesConnectable && inProgress);
|
|
|
|
|
|
|
|
|
@@ -45,21 +50,27 @@ export function ConnectionLineWrapper({ containerStyle, style, type, component }
|
|
|
|
|
className="react-flow__connectionline react-flow__container"
|
|
|
|
|
>
|
|
|
|
|
<g className={cc(['react-flow__connection', getConnectionStatus(isValid)])}>
|
|
|
|
|
<ConnectionLine style={style} type={type} CustomComponent={component} isValid={isValid} />
|
|
|
|
|
<ConnectionLine<NodeType> style={style} type={type} CustomComponent={component} isValid={isValid} />
|
|
|
|
|
</g>
|
|
|
|
|
</svg>
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type ConnectionLineProps = {
|
|
|
|
|
type ConnectionLineProps<NodeType extends Node = Node> = {
|
|
|
|
|
type: ConnectionLineType;
|
|
|
|
|
style?: CSSProperties;
|
|
|
|
|
CustomComponent?: ConnectionLineComponent;
|
|
|
|
|
CustomComponent?: ConnectionLineComponent<NodeType>;
|
|
|
|
|
isValid: boolean | null;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const ConnectionLine = ({ style, type = ConnectionLineType.Bezier, CustomComponent, isValid }: ConnectionLineProps) => {
|
|
|
|
|
const { inProgress, from, fromNode, fromHandle, fromPosition, to, toNode, toHandle, toPosition } = useConnection();
|
|
|
|
|
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<NodeType>();
|
|
|
|
|
|
|
|
|
|
if (!inProgress) {
|
|
|
|
|
return;
|
|
|
|
|