merge main

This commit is contained in:
JzoNg
2025-11-14 10:51:26 +08:00
1272 changed files with 74526 additions and 8746 deletions

View File

@ -35,6 +35,9 @@ export const canRunBySingle = (nodeType: BlockEnum, isChildNode: boolean) => {
|| nodeType === BlockEnum.Assigner
|| nodeType === BlockEnum.HumanInput
|| nodeType === BlockEnum.DataSource
|| nodeType === BlockEnum.TriggerSchedule
|| nodeType === BlockEnum.TriggerWebhook
|| nodeType === BlockEnum.TriggerPlugin
}
export const isSupportCustomRunForm = (nodeType: BlockEnum) => {
@ -93,18 +96,29 @@ export const getNodesConnectedSourceOrTargetHandleIdsMap = (changes: ConnectedSo
return nodesConnectedSourceOrTargetHandleIdsMap
}
export const getValidTreeNodes = (startNode: Node, nodes: Node[], edges: Edge[]) => {
if (!startNode) {
export const getValidTreeNodes = (nodes: Node[], edges: Edge[]) => {
// Find all start nodes (Start and Trigger nodes)
const startNodes = nodes.filter(node =>
node.data.type === BlockEnum.Start
|| node.data.type === BlockEnum.TriggerSchedule
|| node.data.type === BlockEnum.TriggerWebhook
|| node.data.type === BlockEnum.TriggerPlugin,
)
if (startNodes.length === 0) {
return {
validNodes: [],
maxDepth: 0,
}
}
const list: Node[] = [startNode]
let maxDepth = 1
const list: Node[] = []
let maxDepth = 0
const traverse = (root: Node, depth: number) => {
// Add the current node to the list
list.push(root)
if (depth > maxDepth)
maxDepth = depth
@ -112,19 +126,19 @@ export const getValidTreeNodes = (startNode: Node, nodes: Node[], edges: Edge[])
if (outgoers.length) {
outgoers.forEach((outgoer) => {
list.push(outgoer)
// Only traverse if we haven't processed this node yet (avoid cycles)
if (!list.find(n => n.id === outgoer.id)) {
if (outgoer.data.type === BlockEnum.Iteration)
list.push(...nodes.filter(node => node.parentId === outgoer.id))
if (outgoer.data.type === BlockEnum.Loop)
list.push(...nodes.filter(node => node.parentId === outgoer.id))
if (outgoer.data.type === BlockEnum.Iteration)
list.push(...nodes.filter(node => node.parentId === outgoer.id))
if (outgoer.data.type === BlockEnum.Loop)
list.push(...nodes.filter(node => node.parentId === outgoer.id))
traverse(outgoer, depth + 1)
traverse(outgoer, depth + 1)
}
})
}
else {
list.push(root)
// Leaf node - add iteration/loop children if any
if (root.data.type === BlockEnum.Iteration)
list.push(...nodes.filter(node => node.parentId === root.id))
if (root.data.type === BlockEnum.Loop)
@ -132,7 +146,11 @@ export const getValidTreeNodes = (startNode: Node, nodes: Node[], edges: Edge[])
}
}
traverse(startNode, maxDepth)
// Start traversal from all start nodes
startNodes.forEach((startNode) => {
if (!list.find(n => n.id === startNode.id))
traverse(startNode, 1)
})
return {
validNodes: uniqBy(list, 'id'),