diff --git a/apps/builder/components/shared/Graph/Edges/Edge.tsx b/apps/builder/components/shared/Graph/Edges/Edge.tsx index ec08a7210f..b8472d322d 100644 --- a/apps/builder/components/shared/Graph/Edges/Edge.tsx +++ b/apps/builder/components/shared/Graph/Edges/Edge.tsx @@ -75,7 +75,6 @@ export const Edge = ({ edge }: { edge: EdgeProps }) => { sourceTop, ]) - if (sourceTop === 0) return <> return ( - {isConnectable && hasDefaultConnector(localStep) && ( + {(localStep.outgoingEdgeId || + (isConnectable && hasDefaultConnector(localStep))) && ( ) => void @@ -89,9 +89,34 @@ export const deleteEdgeDraft = ( edgeId: string ) => { const edgeIndex = typebot.edges.findIndex(byId(edgeId)) + deleteOutgoingEdgeIdProps(typebot, edgeIndex) typebot.edges.splice(edgeIndex, 1) } +const deleteOutgoingEdgeIdProps = ( + typebot: WritableDraft, + edgeIndex: number +) => { + const edge = typebot.edges[edgeIndex] + const fromBlockIndex = typebot.blocks.findIndex(byId(edge.from.blockId)) + const fromStepIndex = typebot.blocks[fromBlockIndex].steps.findIndex( + byId(edge.from.stepId) + ) + const step = typebot.blocks[fromBlockIndex].steps[fromStepIndex] + const fromItemIndex = + edge.from.itemId && stepHasItems(step) + ? step.items.findIndex(byId(edge.from.itemId)) + : -1 + if (fromStepIndex !== -1) + typebot.blocks[fromBlockIndex].steps[fromStepIndex].outgoingEdgeId = + undefined + if (fromItemIndex !== -1) { + ;( + typebot.blocks[fromBlockIndex].steps[fromStepIndex] as StepWithItems + ).items[fromItemIndex].outgoingEdgeId = undefined + } +} + export const cleanUpEdgeDraft = ( typebot: WritableDraft, deletedNodeId: string diff --git a/apps/builder/contexts/TypebotContext/actions/steps.ts b/apps/builder/contexts/TypebotContext/actions/steps.ts index 84df705ce7..d80624ee7e 100644 --- a/apps/builder/contexts/TypebotContext/actions/steps.ts +++ b/apps/builder/contexts/TypebotContext/actions/steps.ts @@ -10,7 +10,7 @@ import { removeEmptyBlocks } from './blocks' import { WritableDraft } from 'immer/dist/types/types-external' import { SetTypebot } from '../TypebotContext' import produce from 'immer' -import { cleanUpEdgeDraft } from './edges' +import { cleanUpEdgeDraft, deleteEdgeDraft } from './edges' export type StepsActions = { createStep: ( @@ -76,11 +76,18 @@ const createStepDraft = ( typebot: WritableDraft, step: DraggableStep | DraggableStepType, blockId: string, - indices: StepIndices + { blockIndex, stepIndex }: StepIndices ) => { + const steps = typebot.blocks[blockIndex].steps + if ( + stepIndex === steps.length && + stepIndex > 0 && + steps[stepIndex - 1].outgoingEdgeId + ) + deleteEdgeDraft(typebot, steps[stepIndex - 1].outgoingEdgeId as string) typeof step === 'string' - ? createNewStep(typebot, step, blockId, indices) - : moveStepToBlock(typebot, step, blockId, indices) + ? createNewStep(typebot, step, blockId, { blockIndex, stepIndex }) + : moveStepToBlock(typebot, step, blockId, { blockIndex, stepIndex }) removeEmptyBlocks(typebot) }