diff --git a/frontend/src/lib/components/flows/map/FlowModuleSchemaItem.svelte b/frontend/src/lib/components/flows/map/FlowModuleSchemaItem.svelte index c18b5392c7..dd6d9491a8 100644 --- a/frontend/src/lib/components/flows/map/FlowModuleSchemaItem.svelte +++ b/frontend/src/lib/components/flows/map/FlowModuleSchemaItem.svelte @@ -139,7 +139,7 @@ style="width: 275px; height: 34px; background-color: {bgColor};" on:mouseenter={() => (hover = true)} on:mouseleave={() => (hover = false)} - on:click + on:click|preventDefault|stopPropagation >
{#if retry} diff --git a/frontend/src/lib/components/flows/map/FlowModuleSchemaMap.svelte b/frontend/src/lib/components/flows/map/FlowModuleSchemaMap.svelte index b1e9ba485b..edaab7bfbe 100644 --- a/frontend/src/lib/components/flows/map/FlowModuleSchemaMap.svelte +++ b/frontend/src/lib/components/flows/map/FlowModuleSchemaMap.svelte @@ -256,6 +256,7 @@ } } } + $: console.log('has schedule poll', hasSchedulePoll) @@ -458,6 +459,9 @@ on:addSchedulePoll={() => { hasSchedulePoll = true }} + on:removeSchedulePoll={() => { + hasSchedulePoll = false + }} />
{ dispatch('addSchedulePoll') + }, + removeSchedulePoll: () => { + dispatch('removeSchedulePoll') } }, success, @@ -201,12 +205,139 @@ let height = 0 + function removeInputNode(nodes, edges, id) { + const inputNode = nodes.find((node) => node.id === id) + if (!inputNode) return { nodes, edges } + + // Find edges connected to the input node + const connectedEdges = edges.filter((edge) => edge.source === id || edge.target === id) + + // Remove the input node + let updatedNodes = nodes.filter((node) => node.id !== id) + + // Remove edges connected to the input node + let updatedEdges = edges.filter((edge) => edge.source !== id && edge.target !== id) + + // Create new edges from the input node's parent to its children + const inputEdges = connectedEdges.filter((edge) => edge.target === id) + const outputEdges = connectedEdges.filter((edge) => edge.source === id) + + inputEdges.forEach((inputEdge) => { + outputEdges.forEach((outputEdge) => { + const newEdge = { + id: `edge:${inputEdge.source}->${outputEdge.target}`, + source: inputEdge.source, + target: outputEdge.target, + type: 'empty', + data: { + ...outputEdge.data, + sourceId: inputEdge.source, + targetId: outputEdge.target + } + } + updatedEdges.push(newEdge) + }) + }) + + // Update parent ids of the nodes + updatedNodes = updatedNodes.map((node) => { + if (node.data && node.data.parentIds && node.data.parentIds.includes(id)) { + const updatedParentIds = node.data.parentIds.filter((parentId) => parentId !== id) + if (inputNode.data && inputNode.data.parentIds) { + updatedParentIds.push(...inputNode.data.parentIds) + } + return { + ...node, + data: { + ...node.data, + parentIds: [...new Set(updatedParentIds)] // Remove duplicates + } + } + } + return node + }) + + return { nodes: updatedNodes, edges: updatedEdges } + } + + function removeTriggerForLoopNodes(nodes, edges) { + let updatedGraph = { + nodes: [...nodes], + edges: [...edges] + } + let forloopNode = updatedGraph.nodes.find((node) => node?.data?.value?.type === 'forloopflow') + + if (!forloopNode) { + return updatedGraph + } + + if (forloopNode?.data?.value?.parentsIds?.length > 0) { + console.log('triggerScript', forloopNode?.data?.value?.parentsIds[0]) + } + + let forloopModules = forloopNode?.data?.value?.modules + if (!forloopModules) { + return updatedGraph + } + + for (let i = 0; i < forloopModules.length; i++) { + const module = forloopModules[i] + console.log(`Processing module ${i}:`, module) + updatedGraph = removeInputNode(updatedGraph.nodes, updatedGraph.edges, module.id) + } + + updatedGraph = removeInputNode(updatedGraph.nodes, updatedGraph.edges, forloopNode.id) + + return updatedGraph + } + + function removeForLoopStartNodes(nodes, edges) { + let updatedGraph = { + nodes: [...nodes], + edges: [...edges] + } + let forloopNode = updatedGraph.nodes.find((node) => node?.type === 'forLoopStart') + if (!forloopNode) { + return updatedGraph + } + return removeInputNode(updatedGraph.nodes, updatedGraph.edges, forloopNode.id) + } + + function removeForLoopEndNodes(nodes, edges) { + let updatedGraph = { + nodes: [...nodes], + edges: [...edges] + } + let forloopNode = updatedGraph.nodes.find((node) => node?.type === 'forLoopEnd') + if (!forloopNode) { + return updatedGraph + } + return removeInputNode(updatedGraph.nodes, updatedGraph.edges, forloopNode.id) + } + + function processGraph(graph) { + let newGraph = { nodes: graph.nodes, edges: graph.edges } + newGraph = removeInputNode(newGraph.nodes, newGraph.edges, 'Input') + newGraph = removeTriggerForLoopNodes(newGraph.nodes, newGraph.edges) + newGraph = removeForLoopStartNodes(newGraph.nodes, newGraph.edges) + newGraph = removeForLoopEndNodes(newGraph.nodes, newGraph.edges) + return newGraph + } + function updateStores() { if (graph.error) { return } - $nodes = layoutNodes(graph?.nodes) + if (hasSchedulePoll) { + graph = processGraph(graph) + } + + console.log('graph nodes after removal', graph.nodes) + console.log('graph edges after removal', graph.edges) + console.log('graph nodes', graph.nodes) + console.log('graph edges', graph.edges) + $nodes = layoutNodes(graph.nodes) $edges = graph.edges console.log('nodes', $nodes) diff --git a/frontend/src/lib/components/graph/graphBuilder.ts b/frontend/src/lib/components/graph/graphBuilder.ts index 1593ba08f7..80744e13a3 100644 --- a/frontend/src/lib/components/graph/graphBuilder.ts +++ b/frontend/src/lib/components/graph/graphBuilder.ts @@ -15,6 +15,7 @@ export type GraphEventHandlers = { selectedIteration: (detail, moduleId: string) => void changeId: (newId: string) => void addSchedulePoll: () => void + removeSchedulePoll: () => void } export default function graphBuilder( @@ -168,7 +169,8 @@ export default function graphBuilder( type: 'schedulePoll', data: { eventHandlers: eventHandlers, - modules: modules + modules: modules, + ...extra } } nodes.push(schedulePollNode) diff --git a/frontend/src/lib/components/graph/renderers/nodes/ShedulePollNode.svelte b/frontend/src/lib/components/graph/renderers/nodes/ShedulePollNode.svelte index 240cfefbf0..35ca6d1736 100644 --- a/frontend/src/lib/components/graph/renderers/nodes/ShedulePollNode.svelte +++ b/frontend/src/lib/components/graph/renderers/nodes/ShedulePollNode.svelte @@ -1,77 +1,149 @@ - - + + +
diff --git a/frontend/src/lib/components/graph/renderers/nodes/TriggersNode.svelte b/frontend/src/lib/components/graph/renderers/nodes/TriggersNode.svelte index 6e9a1492d8..1951d4aaf4 100644 --- a/frontend/src/lib/components/graph/renderers/nodes/TriggersNode.svelte +++ b/frontend/src/lib/components/graph/renderers/nodes/TriggersNode.svelte @@ -21,8 +21,6 @@ { - console.log('Yes New script at index', data.index, e) - console.log('Event Handlers', data?.eventHandlers) data?.eventHandlers.insert({ modules: data.modules, index: 0,