import React, { memo, ComponentType, useCallback } from 'react'; import cc from 'classcat'; import { useStoreActions } from '../../store/hooks'; import { Edge, EdgeProps, WrapEdgeProps } from '../../types'; export default (EdgeComponent: ComponentType) => { const EdgeWrapper = ({ id, className, type, data, onClick, selected, animated, label, labelStyle, labelShowBg, labelBgStyle, labelBgPadding, labelBgBorderRadius, style, arrowHeadType, source, target, sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition, elementsSelectable, markerEndId, isHidden, }: WrapEdgeProps) => { const setSelectedElements = useStoreActions((actions) => actions.setSelectedElements); const inactive = !elementsSelectable && !onClick; const edgeClasses = cc([ 'react-flow__edge', `react-flow__edge-${type}`, className, { selected, animated, inactive }, ]); const onEdgeClick = useCallback( (event: React.MouseEvent): void => { if (elementsSelectable) { setSelectedElements({ id, source, target }); } if (onClick) { const edgeElement: Edge = { id, source, target, type }; if (typeof data !== 'undefined') { edgeElement.data = data; } onClick(event, edgeElement); } }, [elementsSelectable, id, source, target, type, data, onClick] ); if (isHidden) { return null; } return ( ); }; EdgeWrapper.displayName = 'EdgeWrapper'; return memo(EdgeWrapper); };