1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
| import { useCallback } from 'react'
| import { useTranslation } from 'react-i18next'
| import { useStore } from '../store'
| import { getVarType, toNodeAvailableVars } from '@/app/components/workflow/nodes/_base/components/variable/utils'
| import type {
| Node,
| NodeOutPutVar,
| ValueSelector,
| Var,
| } from '@/app/components/workflow/types'
| import { useIsChatMode } from './use-workflow'
| import { useStoreApi } from 'reactflow'
|
| export const useWorkflowVariables = () => {
| const { t } = useTranslation()
| const environmentVariables = useStore(s => s.environmentVariables)
| const conversationVariables = useStore(s => s.conversationVariables)
|
| const getNodeAvailableVars = useCallback(({
| parentNode,
| beforeNodes,
| isChatMode,
| filterVar,
| hideEnv,
| hideChatVar,
| }: {
| parentNode?: Node | null
| beforeNodes: Node[]
| isChatMode: boolean
| filterVar: (payload: Var, selector: ValueSelector) => boolean
| hideEnv?: boolean
| hideChatVar?: boolean
| }): NodeOutPutVar[] => {
| return toNodeAvailableVars({
| parentNode,
| t,
| beforeNodes,
| isChatMode,
| environmentVariables: hideEnv ? [] : environmentVariables,
| conversationVariables: (isChatMode && !hideChatVar) ? conversationVariables : [],
| filterVar,
| })
| }, [conversationVariables, environmentVariables, t])
|
| const getCurrentVariableType = useCallback(({
| parentNode,
| valueSelector,
| isIterationItem,
| isLoopItem,
| availableNodes,
| isChatMode,
| isConstant,
| }: {
| valueSelector: ValueSelector
| parentNode?: Node | null
| isIterationItem?: boolean
| isLoopItem?: boolean
| availableNodes: any[]
| isChatMode: boolean
| isConstant?: boolean
| }) => {
| return getVarType({
| parentNode,
| valueSelector,
| isIterationItem,
| isLoopItem,
| availableNodes,
| isChatMode,
| isConstant,
| environmentVariables,
| conversationVariables,
| })
| }, [conversationVariables, environmentVariables])
|
| return {
| getNodeAvailableVars,
| getCurrentVariableType,
| }
| }
|
| export const useWorkflowVariableType = () => {
| const store = useStoreApi()
| const {
| getNodes,
| } = store.getState()
| const { getCurrentVariableType } = useWorkflowVariables()
|
| const isChatMode = useIsChatMode()
|
| const getVarType = ({
| nodeId,
| valueSelector,
| }: {
| nodeId: string,
| valueSelector: ValueSelector,
| }) => {
| const node = getNodes().find(n => n.id === nodeId)
| const isInIteration = !!node?.data.isInIteration
| const iterationNode = isInIteration ? getNodes().find(n => n.id === node.parentId) : null
| const availableNodes = [node]
|
| const type = getCurrentVariableType({
| parentNode: iterationNode,
| valueSelector,
| availableNodes,
| isChatMode,
| isConstant: false,
| })
| return type
| }
|
| return getVarType
| }
|
|