From fac70528c78c0f8a6fb3256a962db1b8ce866e5f Mon Sep 17 00:00:00 2001 From: Shuchang Zheng Date: Thu, 3 Apr 2025 09:20:50 -0400 Subject: [PATCH] Search for email blocks in nested levels to generate parameters (#2090) Co-authored-by: Muhammed Salih Altun --- .../workflows/editor/workflowEditorUtils.ts | 24 ++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/skyvern-frontend/src/routes/workflows/editor/workflowEditorUtils.ts b/skyvern-frontend/src/routes/workflows/editor/workflowEditorUtils.ts index d8b43a81..5dbd607c 100644 --- a/skyvern-frontend/src/routes/workflows/editor/workflowEditorUtils.ts +++ b/skyvern-frontend/src/routes/workflows/editor/workflowEditorUtils.ts @@ -3,6 +3,7 @@ import type { Node } from "@xyflow/react"; import { Edge } from "@xyflow/react"; import { nanoid } from "nanoid"; import { + WorkflowBlockType, WorkflowBlockTypes, WorkflowParameterTypes, WorkflowParameterValueType, @@ -1459,13 +1460,30 @@ const sendEmailExpectedParameters = [ }, ] as const; +function getBlocksOfType( + blocks: Array, + blockType: WorkflowBlockType, +): Array { + const blocksOfType: Array = []; + for (const block of blocks) { + if (block.block_type === WorkflowBlockTypes.ForLoop) { + const subBlocks = block.loop_blocks; + const subBlocksOfType = getBlocksOfType(subBlocks, blockType); + blocksOfType.push(...subBlocksOfType); + } else { + if (block.block_type === blockType) { + blocksOfType.push(block); + } + } + } + return blocksOfType; +} + function getAdditionalParametersForEmailBlock( blocks: Array, parameters: Array, ): Array { - const emailBlocks = blocks.filter( - (block) => block.block_type === WorkflowBlockTypes.SendEmail, - ); + const emailBlocks = getBlocksOfType(blocks, WorkflowBlockTypes.SendEmail); if (emailBlocks.length === 0) { return []; }