| 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' |
|
|
| 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, |
| availableNodes, |
| isChatMode, |
| isConstant, |
| }: { |
| valueSelector: ValueSelector |
| parentNode?: Node | null |
| isIterationItem?: boolean |
| availableNodes: any[] |
| isChatMode: boolean |
| isConstant?: boolean |
| }) => { |
| return getVarType({ |
| parentNode, |
| valueSelector, |
| isIterationItem, |
| availableNodes, |
| isChatMode, |
| isConstant, |
| environmentVariables, |
| conversationVariables, |
| }) |
| }, [conversationVariables, environmentVariables]) |
|
|
| return { |
| getNodeAvailableVars, |
| getCurrentVariableType, |
| } |
| } |
|
|