Преглед на файлове

fix(workflow/if-else): keep conditions in sync on variable rename (#23611)

Co-authored-by: crazywoola <100913391+crazywoola@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: crazywoola <427733928@qq.com>
tags/1.8.0
Rajhans Jadhao преди 2 месеца
родител
ревизия
8d47213529
No account linked to committer's email address
променени са 2 файла, в които са добавени 34 реда и са изтрити 6 реда
  1. 5
    5
      web/app/components/workflow/hooks/use-workflow.ts
  2. 29
    1
      web/app/components/workflow/nodes/_base/components/variable/utils.ts

+ 5
- 5
web/app/components/workflow/hooks/use-workflow.ts Целия файл

@@ -259,11 +259,11 @@ export const useWorkflow = () => {

const handleOutVarRenameChange = useCallback((nodeId: string, oldValeSelector: ValueSelector, newVarSelector: ValueSelector) => {
const { getNodes, setNodes } = store.getState()
const afterNodes = getAfterNodesInSameBranch(nodeId)
const effectNodes = findUsedVarNodes(oldValeSelector, afterNodes)
if (effectNodes.length > 0) {
const newNodes = getNodes().map((node) => {
if (effectNodes.find(n => n.id === node.id))
const allNodes = getNodes()
const affectedNodes = findUsedVarNodes(oldValeSelector, allNodes)
if (affectedNodes.length > 0) {
const newNodes = allNodes.map((node) => {
if (affectedNodes.find(n => n.id === node.id))
return updateNodeVars(node, oldValeSelector, newVarSelector)

return node

+ 29
- 1
web/app/components/workflow/nodes/_base/components/variable/utils.ts Целия файл

@@ -1022,7 +1022,15 @@ export const getNodeUsedVars = (node: Node): ValueSelector[] => {
res = (data as IfElseNodeType).conditions?.map((c) => {
return c.variable_selector || []
}) || []
res.push(...((data as IfElseNodeType).cases || []).flatMap(c => (c.conditions || [])).map(c => c.variable_selector || []))
res.push(...((data as IfElseNodeType).cases || []).flatMap(c => (c.conditions || [])).flatMap((c) => {
const selectors: ValueSelector[] = []
if (c.variable_selector)
selectors.push(c.variable_selector)
// Handle sub-variable conditions
if (c.sub_variable_condition && c.sub_variable_condition.conditions)
selectors.push(...c.sub_variable_condition.conditions.map(subC => subC.variable_selector || []).filter(sel => sel.length > 0))
return selectors
}))
break
}
case BlockEnum.Code: {
@@ -1259,6 +1267,26 @@ export const updateNodeVars = (oldNode: Node, oldVarSelector: ValueSelector, new
return c
})
}
if (payload.cases) {
payload.cases = payload.cases.map((caseItem) => {
if (caseItem.conditions) {
caseItem.conditions = caseItem.conditions.map((c) => {
if (c.variable_selector?.join('.') === oldVarSelector.join('.'))
c.variable_selector = newVarSelector
// Handle sub-variable conditions
if (c.sub_variable_condition && c.sub_variable_condition.conditions) {
c.sub_variable_condition.conditions = c.sub_variable_condition.conditions.map((subC) => {
if (subC.variable_selector?.join('.') === oldVarSelector.join('.'))
subC.variable_selector = newVarSelector
return subC
})
}
return c
})
}
return caseItem
})
}
break
}
case BlockEnum.Code: {

Loading…
Отказ
Запис