dify/web/app/components/workflow-app/hooks/use-set-workflow-vars-with-value.ts
2025-04-25 16:28:34 +08:00

53 lines
1.6 KiB
TypeScript

import type { NodeWithVar, VarInInspect } from '@/types/workflow'
import { useWorkflowStore } from '../../workflow/store'
import { useWorkflowVars } from '@/service/use-workflow'
import { useStoreApi } from 'reactflow'
import type { Node } from '@/app/components/workflow/types'
const useSetWorkflowVarsWithValue = () => {
const workflowStore = useWorkflowStore()
const { setNodesWithInspectVars, appId } = workflowStore.getState()
const store = useStoreApi()
const addNodeInfo = (inspectVars: VarInInspect[]) => {
const { getNodes } = store.getState()
const nodeArr = getNodes()
const nodesKeyValue: Record<string, Node> = {}
// TODO: handle conversation, env and system variables
nodeArr.forEach((node) => {
nodesKeyValue[node.id] = node
})
const withValueNodeIds: Record<string, boolean> = {}
inspectVars.forEach((varItem) => {
const nodeId = varItem.selector[0]
const node = nodesKeyValue[nodeId]
if (!node)
return
withValueNodeIds[nodeId] = true
})
const withValueNodes = Object.keys(withValueNodeIds).map((nodeId) => {
return nodesKeyValue[nodeId]
})
const res: NodeWithVar[] = withValueNodes.map((node) => {
const nodeId = node.id
const varsUnderTheNode = inspectVars.filter((varItem) => {
return varItem.selector[0] === nodeId
})
const nodeWithVar = {
nodeId,
nodeType: node.data.type,
title: node.data.title,
vars: varsUnderTheNode,
}
return nodeWithVar
})
setNodesWithInspectVars(res)
}
useWorkflowVars(appId, addNodeInfo)
}
export default useSetWorkflowVarsWithValue