From 2e15fd72ee5d4076704b0cb63f6ce65e55be7e3f Mon Sep 17 00:00:00 2001 From: Peter Date: Tue, 28 Nov 2023 14:30:26 +0100 Subject: [PATCH] fix(react) added internal edge components, to make id, source, handle optional on exported edges --- .../react/src/components/Edges/BezierEdge.tsx | 6 +- .../components/Edges/BezierEdgeInternal.tsx | 59 +++++++++ .../src/components/Edges/SimpleBezierEdge.tsx | 6 +- .../Edges/SimpleBezierEdgeInternal.tsx | 124 ++++++++++++++++++ .../src/components/Edges/SmoothStepEdge.tsx | 6 +- .../Edges/SmoothStepEdgeInternal.tsx | 60 +++++++++ .../react/src/components/Edges/StepEdge.tsx | 3 +- .../src/components/Edges/StepEdgeInternal.tsx | 15 +++ .../src/components/Edges/StraightEdge.tsx | 6 +- .../components/Edges/StraightEdgeInternal.tsx | 48 +++++++ .../react/src/components/Edges/internal.ts | 5 + .../react/src/container/EdgeRenderer/utils.ts | 2 +- .../react/src/container/ReactFlow/index.tsx | 2 +- 13 files changed, 331 insertions(+), 11 deletions(-) create mode 100644 packages/react/src/components/Edges/BezierEdgeInternal.tsx create mode 100644 packages/react/src/components/Edges/SimpleBezierEdgeInternal.tsx create mode 100644 packages/react/src/components/Edges/SmoothStepEdgeInternal.tsx create mode 100644 packages/react/src/components/Edges/StepEdgeInternal.tsx create mode 100644 packages/react/src/components/Edges/StraightEdgeInternal.tsx create mode 100644 packages/react/src/components/Edges/internal.ts diff --git a/packages/react/src/components/Edges/BezierEdge.tsx b/packages/react/src/components/Edges/BezierEdge.tsx index 8f446393..9187131c 100644 --- a/packages/react/src/components/Edges/BezierEdge.tsx +++ b/packages/react/src/components/Edges/BezierEdge.tsx @@ -1,11 +1,12 @@ import { memo } from 'react'; -import { Position, getBezierPath } from '@xyflow/system'; +import { type Optional, Position, getBezierPath } from '@xyflow/system'; import BaseEdge from './BaseEdge'; import type { BezierEdgeProps } from '../../types'; const BezierEdge = memo( ({ + id, sourceX, sourceY, targetX, @@ -23,7 +24,7 @@ const BezierEdge = memo( markerStart, pathOptions, interactionWidth, - }: BezierEdgeProps) => { + }: Optional) => { const [path, labelX, labelY] = getBezierPath({ sourceX, sourceY, @@ -36,6 +37,7 @@ const BezierEdge = memo( return ( { + const [path, labelX, labelY] = getBezierPath({ + sourceX, + sourceY, + sourcePosition, + targetX, + targetY, + targetPosition, + curvature: pathOptions?.curvature, + }); + + return ( + + ); + } +); + +BezierEdge.displayName = 'BezierEdge'; + +export default BezierEdge; diff --git a/packages/react/src/components/Edges/SimpleBezierEdge.tsx b/packages/react/src/components/Edges/SimpleBezierEdge.tsx index d9fa50c4..1132e216 100644 --- a/packages/react/src/components/Edges/SimpleBezierEdge.tsx +++ b/packages/react/src/components/Edges/SimpleBezierEdge.tsx @@ -1,5 +1,5 @@ import { memo } from 'react'; -import { Position, getBezierEdgeCenter } from '@xyflow/system'; +import { type Optional, Position, getBezierEdgeCenter } from '@xyflow/system'; import BaseEdge from './BaseEdge'; import type { EdgeProps } from '../../types'; @@ -73,6 +73,7 @@ export function getSimpleBezierPath({ const SimpleBezierEdge = memo( ({ + id, sourceX, sourceY, targetX, @@ -89,7 +90,7 @@ const SimpleBezierEdge = memo( markerEnd, markerStart, interactionWidth, - }: EdgeProps) => { + }: Optional) => { const [path, labelX, labelY] = getSimpleBezierPath({ sourceX, sourceY, @@ -101,6 +102,7 @@ const SimpleBezierEdge = memo( return ( { + const [path, labelX, labelY] = getSimpleBezierPath({ + sourceX, + sourceY, + sourcePosition, + targetX, + targetY, + targetPosition, + }); + + return ( + + ); + } +); + +SimpleBezierEdge.displayName = 'SimpleBezierEdge'; + +export default SimpleBezierEdge; diff --git a/packages/react/src/components/Edges/SmoothStepEdge.tsx b/packages/react/src/components/Edges/SmoothStepEdge.tsx index be635a4e..a6965ca7 100644 --- a/packages/react/src/components/Edges/SmoothStepEdge.tsx +++ b/packages/react/src/components/Edges/SmoothStepEdge.tsx @@ -1,11 +1,12 @@ import { memo } from 'react'; -import { Position, getSmoothStepPath } from '@xyflow/system'; +import { type Optional, Position, getSmoothStepPath } from '@xyflow/system'; import BaseEdge from './BaseEdge'; import type { SmoothStepEdgeProps } from '../../types'; const SmoothStepEdge = memo( ({ + id, sourceX, sourceY, targetX, @@ -23,7 +24,7 @@ const SmoothStepEdge = memo( markerStart, pathOptions, interactionWidth, - }: SmoothStepEdgeProps) => { + }: Optional) => { const [path, labelX, labelY] = getSmoothStepPath({ sourceX, sourceY, @@ -37,6 +38,7 @@ const SmoothStepEdge = memo( return ( { + const [path, labelX, labelY] = getSmoothStepPath({ + sourceX, + sourceY, + sourcePosition, + targetX, + targetY, + targetPosition, + borderRadius: pathOptions?.borderRadius, + offset: pathOptions?.offset, + }); + + return ( + + ); + } +); + +SmoothStepEdge.displayName = 'SmoothStepEdge'; + +export default SmoothStepEdge; diff --git a/packages/react/src/components/Edges/StepEdge.tsx b/packages/react/src/components/Edges/StepEdge.tsx index df2646a7..8edd819a 100644 --- a/packages/react/src/components/Edges/StepEdge.tsx +++ b/packages/react/src/components/Edges/StepEdge.tsx @@ -1,9 +1,10 @@ import { memo, useMemo } from 'react'; +import { Optional } from '@xyflow/system'; import SmoothStepEdge from './SmoothStepEdge'; import type { SmoothStepEdgeProps } from '../../types'; -const StepEdge = memo((props: SmoothStepEdgeProps) => ( +const StepEdge = memo((props: Optional) => ( ({ borderRadius: 0, offset: props.pathOptions?.offset }), [props.pathOptions?.offset])} diff --git a/packages/react/src/components/Edges/StepEdgeInternal.tsx b/packages/react/src/components/Edges/StepEdgeInternal.tsx new file mode 100644 index 00000000..2772424d --- /dev/null +++ b/packages/react/src/components/Edges/StepEdgeInternal.tsx @@ -0,0 +1,15 @@ +import { memo, useMemo } from 'react'; + +import SmoothStepEdgeInternal from './SmoothStepEdgeInternal'; +import type { SmoothStepEdgeProps } from '../../types'; + +const StepEdge = memo((props: SmoothStepEdgeProps) => ( + ({ borderRadius: 0, offset: props.pathOptions?.offset }), [props.pathOptions?.offset])} + /> +)); + +StepEdge.displayName = 'StepEdge'; + +export default StepEdge; diff --git a/packages/react/src/components/Edges/StraightEdge.tsx b/packages/react/src/components/Edges/StraightEdge.tsx index 06f4a161..094eb7f9 100644 --- a/packages/react/src/components/Edges/StraightEdge.tsx +++ b/packages/react/src/components/Edges/StraightEdge.tsx @@ -1,11 +1,12 @@ import { memo } from 'react'; -import { getStraightPath } from '@xyflow/system'; +import { type Optional, getStraightPath } from '@xyflow/system'; import BaseEdge from './BaseEdge'; import type { EdgeProps } from '../../types'; const StraightEdge = memo( ({ + id, sourceX, sourceY, targetX, @@ -20,11 +21,12 @@ const StraightEdge = memo( markerEnd, markerStart, interactionWidth, - }: EdgeProps) => { + }: Optional) => { const [path, labelX, labelY] = getStraightPath({ sourceX, sourceY, targetX, targetY }); return ( { + const [path, labelX, labelY] = getStraightPath({ sourceX, sourceY, targetX, targetY }); + + return ( + + ); + } +); + +StraightEdge.displayName = 'StraightEdge'; + +export default StraightEdge; diff --git a/packages/react/src/components/Edges/internal.ts b/packages/react/src/components/Edges/internal.ts new file mode 100644 index 00000000..11b86932 --- /dev/null +++ b/packages/react/src/components/Edges/internal.ts @@ -0,0 +1,5 @@ +export { default as SimpleBezierEdge } from './SimpleBezierEdgeInternal'; +export { default as SmoothStepEdge } from './SmoothStepEdgeInternal'; +export { default as StepEdge } from './StepEdgeInternal'; +export { default as StraightEdge } from './StraightEdgeInternal'; +export { default as BezierEdge } from './BezierEdgeInternal'; diff --git a/packages/react/src/container/EdgeRenderer/utils.ts b/packages/react/src/container/EdgeRenderer/utils.ts index 0e8f39d3..03e0dba3 100644 --- a/packages/react/src/container/EdgeRenderer/utils.ts +++ b/packages/react/src/container/EdgeRenderer/utils.ts @@ -1,6 +1,6 @@ import type { ComponentType } from 'react'; -import { BezierEdge, SmoothStepEdge, StepEdge, StraightEdge, SimpleBezierEdge } from '../../components/Edges'; +import { BezierEdge, SmoothStepEdge, StepEdge, StraightEdge, SimpleBezierEdge } from '../../components/Edges/internal'; import wrapEdge from '../../components/Edges/wrapEdge'; import type { EdgeProps, EdgeTypes, EdgeTypesWrapped } from '../../types'; diff --git a/packages/react/src/container/ReactFlow/index.tsx b/packages/react/src/container/ReactFlow/index.tsx index 1b3dc796..d780046e 100644 --- a/packages/react/src/container/ReactFlow/index.tsx +++ b/packages/react/src/container/ReactFlow/index.tsx @@ -12,7 +12,7 @@ import { } from '@xyflow/system'; import Attribution from '../../components/Attribution'; -import { BezierEdge, SmoothStepEdge, StepEdge, StraightEdge, SimpleBezierEdge } from '../../components/Edges'; +import { BezierEdge, SmoothStepEdge, StepEdge, StraightEdge, SimpleBezierEdge } from '../../components/Edges/internal'; import DefaultNode from '../../components/Nodes/DefaultNode'; import InputNode from '../../components/Nodes/InputNode'; import OutputNode from '../../components/Nodes/OutputNode';