12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- 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]
- }, [])
- }
|