mirror of
				https://github.com/langgenius/dify.git
				synced 2025-10-31 02:42:59 +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] | ||
|  |   }, []) | ||
|  | } |