mirror of
				https://github.com/langgenius/dify.git
				synced 2025-10-31 19:03:09 +00:00 
			
		
		
		
	 e135ffc2c1
			
		
	
	
		e135ffc2c1
		
			
		
	
	
	
	
		
			
			Signed-off-by: -LAN- <laipz8200@outlook.com> Co-authored-by: -LAN- <laipz8200@outlook.com>
		
			
				
	
	
		
			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]
 | |
|   }, [])
 | |
| }
 |