Просмотр исходного кода

feat: Enhance the alignment logic of the nodes in the context menu (#23617)

tags/1.7.2
GuanMu 2 месяцев назад
Родитель
Сommit
5cf55fcbab
Аккаунт пользователя с таким Email не найден
1 измененных файлов: 24 добавлений и 1 удалений
  1. 24
    1
      web/app/components/workflow/selection-contextmenu.tsx

+ 24
- 1
web/app/components/workflow/selection-contextmenu.tsx Просмотреть файл

@@ -260,7 +260,30 @@ const SelectionContextmenu = () => {

// Get all selected nodes
const selectedNodeIds = selectedNodes.map(node => node.id)
const nodesToAlign = nodes.filter(node => selectedNodeIds.includes(node.id))

// Find container nodes and their children
// Container nodes (like Iteration and Loop) have child nodes that should not be aligned independently
// when the container is selected. This prevents child nodes from being moved outside their containers.
const childNodeIds = new Set<string>()

nodes.forEach((node) => {
// Check if this is a container node (Iteration or Loop)
if (node.data._children && node.data._children.length > 0) {
// If container node is selected, add its children to the exclusion set
if (selectedNodeIds.includes(node.id)) {
// Add all its children to the childNodeIds set
node.data._children.forEach((child: { nodeId: string; nodeType: string }) => {
childNodeIds.add(child.nodeId)
})
}
}
})

// Filter out child nodes from the alignment operation
// Only align nodes that are selected AND are not children of container nodes
// This ensures container nodes can be aligned while their children stay in the same relative position
const nodesToAlign = nodes.filter(node =>
selectedNodeIds.includes(node.id) && !childNodeIds.has(node.id))

if (nodesToAlign.length <= 1) {
handleSelectionContextmenuCancel()

Загрузка…
Отмена
Сохранить