use-workflow-variables.ts 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import { useCallback } from 'react'
  2. import { useTranslation } from 'react-i18next'
  3. import { useStore } from '../store'
  4. import { getVarType, toNodeAvailableVars } from '@/app/components/workflow/nodes/_base/components/variable/utils'
  5. import type {
  6. Node,
  7. NodeOutPutVar,
  8. ValueSelector,
  9. Var,
  10. } from '@/app/components/workflow/types'
  11. export const useWorkflowVariables = () => {
  12. const { t } = useTranslation()
  13. const environmentVariables = useStore(s => s.environmentVariables)
  14. const getNodeAvailableVars = useCallback(({
  15. parentNode,
  16. beforeNodes,
  17. isChatMode,
  18. filterVar,
  19. hideEnv,
  20. }: {
  21. parentNode?: Node | null
  22. beforeNodes: Node[]
  23. isChatMode: boolean
  24. filterVar: (payload: Var, selector: ValueSelector) => boolean
  25. hideEnv?: boolean
  26. }): NodeOutPutVar[] => {
  27. return toNodeAvailableVars({
  28. parentNode,
  29. t,
  30. beforeNodes,
  31. isChatMode,
  32. environmentVariables: hideEnv ? [] : environmentVariables,
  33. filterVar,
  34. })
  35. }, [environmentVariables, t])
  36. const getCurrentVariableType = useCallback(({
  37. parentNode,
  38. valueSelector,
  39. isIterationItem,
  40. availableNodes,
  41. isChatMode,
  42. isConstant,
  43. }: {
  44. valueSelector: ValueSelector
  45. parentNode?: Node | null
  46. isIterationItem?: boolean
  47. availableNodes: any[]
  48. isChatMode: boolean
  49. isConstant?: boolean
  50. }) => {
  51. return getVarType({
  52. parentNode,
  53. valueSelector,
  54. isIterationItem,
  55. availableNodes,
  56. isChatMode,
  57. isConstant,
  58. environmentVariables,
  59. })
  60. }, [environmentVariables])
  61. return {
  62. getNodeAvailableVars,
  63. getCurrentVariableType,
  64. }
  65. }