| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 | 
							- import type { NodeTracing } from '@/types/workflow'
 
- import { addChildrenToIterationNode } from './iteration'
 
- import { addChildrenToLoopNode } from './loop'
 
- import formatParallelNode from './parallel'
 
- import formatRetryNode from './retry'
 
- import formatAgentNode from './agent'
 
- import { cloneDeep } from 'lodash-es'
 
- import { BlockEnum } from '../../../types'
 
- const formatIterationAndLoopNode = (list: NodeTracing[], t: any) => {
 
-   const clonedList = cloneDeep(list)
 
-   // Identify all loop and iteration nodes
 
-   const loopNodeIds = clonedList
 
-     .filter(item => item.node_type === BlockEnum.Loop)
 
-     .map(item => item.node_id)
 
-   const iterationNodeIds = clonedList
 
-     .filter(item => item.node_type === BlockEnum.Iteration)
 
-     .map(item => item.node_id)
 
-   // Identify all child nodes for both loop and iteration
 
-   const loopChildrenNodeIds = clonedList
 
-     .filter(item => item.execution_metadata?.loop_id && loopNodeIds.includes(item.execution_metadata.loop_id))
 
-     .map(item => item.node_id)
 
-   const iterationChildrenNodeIds = clonedList
 
-     .filter(item => item.execution_metadata?.iteration_id && iterationNodeIds.includes(item.execution_metadata.iteration_id))
 
-     .map(item => item.node_id)
 
-   // Filter out child nodes as they will be included in their parent nodes
 
-   const result = clonedList
 
-     .filter(item => !loopChildrenNodeIds.includes(item.node_id) && !iterationChildrenNodeIds.includes(item.node_id))
 
-     .map((item) => {
 
-       // Process Loop nodes
 
-       if (item.node_type === BlockEnum.Loop) {
 
-         const childrenNodes = clonedList.filter(child => child.execution_metadata?.loop_id === item.node_id)
 
-         const error = childrenNodes.find(child => child.status === 'failed')
 
-         if (error) {
 
-           item.status = 'failed'
 
-           item.error = error.error
 
-         }
 
-         const addedChildrenList = addChildrenToLoopNode(item, childrenNodes)
 
-         // Handle parallel nodes in loop node
 
-         if (addedChildrenList.details && addedChildrenList.details.length > 0) {
 
-           addedChildrenList.details = addedChildrenList.details.map((row) => {
 
-             return formatParallelNode(row, t)
 
-           })
 
-         }
 
-         return addedChildrenList
 
-       }
 
-       // Process Iteration nodes
 
-       if (item.node_type === BlockEnum.Iteration) {
 
-         const childrenNodes = clonedList.filter(child => child.execution_metadata?.iteration_id === item.node_id)
 
-         const error = childrenNodes.find(child => child.status === 'failed')
 
-         if (error) {
 
-           item.status = 'failed'
 
-           item.error = error.error
 
-         }
 
-         const addedChildrenList = addChildrenToIterationNode(item, childrenNodes)
 
-         // Handle parallel nodes in iteration node
 
-         if (addedChildrenList.details && addedChildrenList.details.length > 0) {
 
-           addedChildrenList.details = addedChildrenList.details.map((row) => {
 
-             return formatParallelNode(row, t)
 
-           })
 
-         }
 
-         return addedChildrenList
 
-       }
 
-       return item
 
-     })
 
-   return result
 
- }
 
- const formatToTracingNodeList = (list: NodeTracing[], t: any) => {
 
-   const allItems = cloneDeep([...list]).sort((a, b) => a.index - b.index)
 
-   /*
 
-   * First handle not change list structure node
 
-   * Because Handle struct node will put the node in different
 
-   */
 
-   const formattedAgentList = formatAgentNode(allItems)
 
-   const formattedRetryList = formatRetryNode(formattedAgentList) // retry one node
 
-   // would change the structure of the list. Iteration and parallel can include each other.
 
-   const formattedLoopAndIterationList = formatIterationAndLoopNode(formattedRetryList, t)
 
-   const formattedParallelList = formatParallelNode(formattedLoopAndIterationList, t)
 
-   const result = formattedParallelList
 
-   // console.log(allItems)
 
-   // console.log(result)
 
-   return result
 
- }
 
- export default formatToTracingNodeList
 
 
  |