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, } }