mirror of
				https://github.com/langgenius/dify.git
				synced 2025-11-04 12:53:38 +00:00 
			
		
		
		
	
		
			
	
	
		
			71 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			71 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| 
								 | 
							
								import { useCallback } from 'react'
							 | 
						||
| 
								 | 
							
								import {
							 | 
						||
| 
								 | 
							
								  useNodes,
							 | 
						||
| 
								 | 
							
								} from 'reactflow'
							 | 
						||
| 
								 | 
							
								import { uniqBy } from 'lodash-es'
							 | 
						||
| 
								 | 
							
								import {
							 | 
						||
| 
								 | 
							
								  useIsChatMode,
							 | 
						||
| 
								 | 
							
								  useWorkflow,
							 | 
						||
| 
								 | 
							
								  useWorkflowVariables,
							 | 
						||
| 
								 | 
							
								} from '../../hooks'
							 | 
						||
| 
								 | 
							
								import type {
							 | 
						||
| 
								 | 
							
								  Node,
							 | 
						||
| 
								 | 
							
								  Var,
							 | 
						||
| 
								 | 
							
								} from '../../types'
							 | 
						||
| 
								 | 
							
								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]
							 | 
						||
| 
								 | 
							
								  }, [])
							 | 
						||
| 
								 | 
							
								}
							 |