mirror of
https://github.com/langgenius/dify.git
synced 2026-03-29 08:00:43 -04:00
Co-authored-by: CodingOnStar <hanxujiang@dify.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
78 lines
2.0 KiB
TypeScript
78 lines
2.0 KiB
TypeScript
import type { Edge, EdgeChange } from 'reactflow'
|
|
import type { Node } from '../types'
|
|
import { produce } from 'immer'
|
|
import { getNodesConnectedSourceOrTargetHandleIdsMap } from '../utils'
|
|
|
|
export const applyConnectedHandleNodeData = (
|
|
nodes: Node[],
|
|
edgeChanges: Parameters<typeof getNodesConnectedSourceOrTargetHandleIdsMap>[0],
|
|
) => {
|
|
const nodesConnectedSourceOrTargetHandleIdsMap = getNodesConnectedSourceOrTargetHandleIdsMap(edgeChanges, nodes)
|
|
|
|
return produce(nodes, (draft: Node[]) => {
|
|
draft.forEach((node) => {
|
|
if (nodesConnectedSourceOrTargetHandleIdsMap[node.id]) {
|
|
node.data = {
|
|
...node.data,
|
|
...nodesConnectedSourceOrTargetHandleIdsMap[node.id],
|
|
}
|
|
}
|
|
})
|
|
})
|
|
}
|
|
|
|
export const clearEdgeMenuIfNeeded = ({
|
|
edgeMenu,
|
|
edgeIds,
|
|
}: {
|
|
edgeMenu?: {
|
|
edgeId: string
|
|
}
|
|
edgeIds: string[]
|
|
}) => {
|
|
return !!(edgeMenu && edgeIds.includes(edgeMenu.edgeId))
|
|
}
|
|
|
|
export const updateEdgeHoverState = (
|
|
edges: Edge[],
|
|
edgeId: string,
|
|
hovering: boolean,
|
|
) => produce(edges, (draft) => {
|
|
const currentEdge = draft.find(edge => edge.id === edgeId)
|
|
if (currentEdge)
|
|
currentEdge.data._hovering = hovering
|
|
})
|
|
|
|
export const updateEdgeSelectionState = (
|
|
edges: Edge[],
|
|
changes: EdgeChange[],
|
|
) => produce(edges, (draft) => {
|
|
changes.forEach((change) => {
|
|
if (change.type === 'select') {
|
|
const currentEdge = draft.find(edge => edge.id === change.id)
|
|
if (currentEdge)
|
|
currentEdge.selected = change.selected
|
|
}
|
|
})
|
|
})
|
|
|
|
export const buildContextMenuEdges = (
|
|
edges: Edge[],
|
|
edgeId: string,
|
|
) => produce(edges, (draft) => {
|
|
draft.forEach((item) => {
|
|
item.selected = item.id === edgeId
|
|
if (item.data._isBundled)
|
|
item.data._isBundled = false
|
|
})
|
|
})
|
|
|
|
export const clearNodeSelectionState = (nodes: Node[]) => produce(nodes, (draft: Node[]) => {
|
|
draft.forEach((node) => {
|
|
node.data.selected = false
|
|
if (node.data._isBundled)
|
|
node.data._isBundled = false
|
|
node.selected = false
|
|
})
|
|
})
|