From 2dc677b4ff6dc78f25251d735aa9ae94b1d2d735 Mon Sep 17 00:00:00 2001 From: Emir Karabeg Date: Thu, 30 Jan 2025 12:56:59 -0800 Subject: [PATCH] Added ability for horizontal ports --- .../components/custom-edge/custom-edge.tsx | 9 +++++ .../components/action-bar/action-bar.tsx | 36 ++++++++++++++++++- .../sub-block/components/long-input.tsx | 2 +- .../workflow-block/workflow-block.tsx | 11 +++--- stores/workflow/types.ts | 2 ++ stores/workflow/workflow-registry.ts | 1 - stores/workflow/workflow-store.ts | 16 +++++++++ 7 files changed, 70 insertions(+), 7 deletions(-) diff --git a/app/w/[id]/components/custom-edge/custom-edge.tsx b/app/w/[id]/components/custom-edge/custom-edge.tsx index 0ddf4b4541..8e2459ee6e 100644 --- a/app/w/[id]/components/custom-edge/custom-edge.tsx +++ b/app/w/[id]/components/custom-edge/custom-edge.tsx @@ -2,11 +2,20 @@ import { EdgeProps, getSmoothStepPath } from 'reactflow' import { X } from 'lucide-react' export const CustomEdge = (props: EdgeProps) => { + const isHorizontal = + props.sourcePosition === 'right' || props.sourcePosition === 'left' + + // For horizontal handles, we'll add a minimum extension to ensure the path + // always goes outward before going up/down const [edgePath] = getSmoothStepPath({ sourceX: props.sourceX, sourceY: props.sourceY, + sourcePosition: props.sourcePosition, targetX: props.targetX, targetY: props.targetY, + targetPosition: props.targetPosition, + borderRadius: 8, + offset: isHorizontal ? 30 : 20, // Increased offset for horizontal handles to ensure outward extension }) const midPoint = { diff --git a/app/w/components/workflow-block/components/action-bar/action-bar.tsx b/app/w/components/workflow-block/components/action-bar/action-bar.tsx index e986bca027..dffe846608 100644 --- a/app/w/components/workflow-block/components/action-bar/action-bar.tsx +++ b/app/w/components/workflow-block/components/action-bar/action-bar.tsx @@ -1,5 +1,13 @@ import { Button } from '@/components/ui/button' -import { Trash2, Play, Circle, CircleOff, Copy } from 'lucide-react' +import { + Trash2, + Play, + Circle, + CircleOff, + Copy, + ArrowLeftRight, + ArrowUpDown, +} from 'lucide-react' import { useWorkflowStore } from '@/stores/workflow/workflow-store' import { Tooltip, @@ -17,10 +25,16 @@ export function ActionBar({ blockId }: ActionBarProps) { const toggleBlockEnabled = useWorkflowStore( (state) => state.toggleBlockEnabled ) + const toggleBlockHandles = useWorkflowStore( + (state) => state.toggleBlockHandles + ) const duplicateBlock = useWorkflowStore((state) => state.duplicateBlock) const isEnabled = useWorkflowStore( (state) => state.blocks[blockId]?.enabled ?? true ) + const horizontalHandles = useWorkflowStore( + (state) => state.blocks[blockId]?.horizontalHandles ?? false + ) return (
@@ -75,6 +89,26 @@ export function ActionBar({ blockId }: ActionBarProps) { Duplicate Block + + + + + + {horizontalHandles ? 'Vertical Ports' : 'Horizontal Ports'} + + +