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 @@
-
-