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

fix: variable-assigner node connect (#3288)

tags/0.6.2
zxhlyh преди 1 година
родител
ревизия
240c793e7a
No account linked to committer's email address

+ 12
- 2
web/app/components/workflow/hooks/use-nodes-interactions.ts Целия файл

@@ -43,7 +43,10 @@ export const useNodesInteractions = () => {
const workflowStore = useWorkflowStore()
const nodesExtraData = useNodesExtraData()
const { handleSyncWorkflowDraft } = useNodesSyncDraft()
const { getAfterNodesInSameBranch } = useWorkflow()
const {
getAfterNodesInSameBranch,
getTreeLeafNodes,
} = useWorkflow()
const { getNodesReadOnly } = useNodesReadOnly()
const dragNodeStartPosition = useRef({ x: 0, y: 0 } as { x: number; y: number })
const connectingNodeRef = useRef<{ nodeId: string; handleType: HandleType } | null>(null)
@@ -313,6 +316,13 @@ export const useNodesInteractions = () => {
setEdges,
} = store.getState()
const nodes = getNodes()
const targetNode = nodes.find(node => node.id === target!)
if (targetNode && targetNode?.data.type === BlockEnum.VariableAssigner) {
const treeNodes = getTreeLeafNodes(target!)

if (!treeNodes.find(treeNode => treeNode.id === source))
return
}
const needDeleteEdges = edges.filter((edge) => {
if (edge.source === source) {
if (edge.sourceHandle)
@@ -368,7 +378,7 @@ export const useNodesInteractions = () => {
})
setEdges(newEdges)
handleSyncWorkflowDraft()
}, [store, handleSyncWorkflowDraft, getNodesReadOnly])
}, [store, handleSyncWorkflowDraft, getNodesReadOnly, getTreeLeafNodes])

const handleNodeConnectStart = useCallback<OnConnectStart>((_, { nodeId, handleType }) => {
if (nodeId && handleType) {

+ 2
- 0
web/app/components/workflow/nodes/variable-assigner/components/var-list/index.tsx Целия файл

@@ -6,6 +6,7 @@ import produce from 'immer'
import RemoveButton from '../../../_base/components/remove-button'
import VarReferencePicker from '@/app/components/workflow/nodes/_base/components/variable/var-reference-picker'
import type { ValueSelector, Var } from '@/app/components/workflow/types'
import { VarType as VarKindType } from '@/app/components/workflow/nodes/tool/types'

type Props = {
readonly: boolean
@@ -71,6 +72,7 @@ const VarList: FC<Props> = ({
onOpen={handleOpen(index)}
onlyLeafNodeVar={onlyLeafNodeVar}
filterVar={filterVar}
defaultVarKindType={VarKindType.variable}
/>
{!readonly && (
<RemoveButton

+ 3
- 3
web/app/components/workflow/utils.ts Целия файл

@@ -59,7 +59,7 @@ const getCycleEdges = (nodes: Node[], edges: Edge[]) => {
}

for (const edge of edges)
adjaList[edge.source].push(edge.target)
adjaList[edge.source]?.push(edge.target)

for (let i = 0; i < nodes.length; i++) {
if (color[nodes[i].id] === WHITE)
@@ -143,14 +143,14 @@ export const initialEdges = (edges: Edge[], nodes: Node[]) => {
if (!edge.targetHandle)
edge.targetHandle = 'target'

if (!edge.data?.sourceType) {
if (!edge.data?.sourceType && edge.source) {
edge.data = {
...edge.data,
sourceType: nodesMap[edge.source].data.type!,
} as any
}

if (!edge.data?.targetType) {
if (!edge.data?.targetType && edge.target) {
edge.data = {
...edge.data,
targetType: nodesMap[edge.target].data.type!,

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