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