dify/web/app/components/workflow/nodes/assigner/hooks.ts
Stephen Zhou a84c2d36a3
style: format with vp fmt (#38803)
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-07-12 15:57:46 +00:00

66 lines
2.1 KiB
TypeScript

import type { Node, Var } from '../../types'
import { uniqBy } from 'es-toolkit/compat'
import { useCallback } from 'react'
import { useNodes } from 'reactflow'
import { useIsChatMode, useWorkflow, useWorkflowVariables } from '../../hooks'
import { AssignerNodeInputType, WriteMode } from './types'
export const useGetAvailableVars = () => {
const nodes: Node[] = useNodes()
const { getBeforeNodesInSameBranchIncludeParent } = useWorkflow()
const { getNodeAvailableVars } = useWorkflowVariables()
const isChatMode = useIsChatMode()
const getAvailableVars = useCallback(
(nodeId: string, handleId: string, filterVar: (v: Var) => boolean, hideEnv = false) => {
const availableNodes: Node[] = []
const currentNode = nodes.find((node) => node.id === nodeId)!
if (!currentNode) return []
const beforeNodes = getBeforeNodesInSameBranchIncludeParent(nodeId)
availableNodes.push(...beforeNodes)
const parentNode = nodes.find((node) => node.id === currentNode.parentId)
if (hideEnv) {
return getNodeAvailableVars({
parentNode,
beforeNodes: uniqBy(availableNodes, 'id').filter((node) => node.id !== nodeId),
isChatMode,
hideEnv,
hideChatVar: hideEnv,
filterVar,
})
.map((node) => ({
...node,
vars: node.isStartNode
? node.vars.filter((v) => !v.variable.startsWith('sys.'))
: node.vars,
}))
.filter((item) => item.vars.length > 0)
}
return getNodeAvailableVars({
parentNode,
beforeNodes: uniqBy(availableNodes, 'id').filter((node) => node.id !== nodeId),
isChatMode,
filterVar,
})
},
[nodes, getBeforeNodesInSameBranchIncludeParent, getNodeAvailableVars, isChatMode],
)
return getAvailableVars
}
export const useHandleAddOperationItem = () => {
return useCallback((list: any[]) => {
const newItem = {
variable_selector: [],
write_mode: WriteMode.overwrite,
input_type: AssignerNodeInputType.variable,
value: '',
}
return [...list, newItem]
}, [])
}