您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

use-config.ts 3.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. import { useCallback } from 'react'
  2. import produce from 'immer'
  3. import {
  4. useIsChatMode,
  5. useNodesReadOnly,
  6. useWorkflow,
  7. } from '../../hooks'
  8. import { VarType } from '../../types'
  9. import type { ErrorHandleMode, ValueSelector, Var } from '../../types'
  10. import useNodeCrud from '../_base/hooks/use-node-crud'
  11. import type { IterationNodeType } from './types'
  12. import { toNodeOutputVars } from '../_base/components/variable/utils'
  13. import type { VarType as VarKindType } from '@/app/components/workflow/nodes/tool/types'
  14. import type { Item } from '@/app/components/base/select'
  15. import useInspectVarsCrud from '../../hooks/use-inspect-vars-crud'
  16. import { isEqual } from 'lodash-es'
  17. const useConfig = (id: string, payload: IterationNodeType) => {
  18. const {
  19. deleteNodeInspectorVars,
  20. } = useInspectVarsCrud()
  21. const { nodesReadOnly: readOnly } = useNodesReadOnly()
  22. const isChatMode = useIsChatMode()
  23. const { inputs, setInputs } = useNodeCrud<IterationNodeType>(id, payload)
  24. const filterInputVar = useCallback((varPayload: Var) => {
  25. return [VarType.array, VarType.arrayString, VarType.arrayNumber, VarType.arrayObject, VarType.arrayFile].includes(varPayload.type)
  26. }, [])
  27. const handleInputChange = useCallback((input: ValueSelector | string, _varKindType: VarKindType, varInfo?: Var) => {
  28. const newInputs = produce(inputs, (draft) => {
  29. draft.iterator_selector = input as ValueSelector || []
  30. draft.iterator_input_type = varInfo?.type || VarType.arrayString
  31. })
  32. setInputs(newInputs)
  33. }, [inputs, setInputs])
  34. // output
  35. const { getIterationNodeChildren } = useWorkflow()
  36. const iterationChildrenNodes = getIterationNodeChildren(id)
  37. const childrenNodeVars = toNodeOutputVars(iterationChildrenNodes, isChatMode)
  38. const handleOutputVarChange = useCallback((output: ValueSelector | string, _varKindType: VarKindType, varInfo?: Var) => {
  39. if (isEqual(inputs.output_selector, output as ValueSelector))
  40. return
  41. const newInputs = produce(inputs, (draft) => {
  42. draft.output_selector = output as ValueSelector || []
  43. const outputItemType = varInfo?.type || VarType.string
  44. draft.output_type = ({
  45. [VarType.string]: VarType.arrayString,
  46. [VarType.number]: VarType.arrayNumber,
  47. [VarType.object]: VarType.arrayObject,
  48. [VarType.file]: VarType.arrayFile,
  49. // list operator node can output array
  50. [VarType.array]: VarType.array,
  51. [VarType.arrayFile]: VarType.arrayFile,
  52. [VarType.arrayString]: VarType.arrayString,
  53. [VarType.arrayNumber]: VarType.arrayNumber,
  54. [VarType.arrayObject]: VarType.arrayObject,
  55. } as Record<VarType, VarType>)[outputItemType] || VarType.arrayString
  56. })
  57. setInputs(newInputs)
  58. deleteNodeInspectorVars(id)
  59. }, [deleteNodeInspectorVars, id, inputs, setInputs])
  60. const changeParallel = useCallback((value: boolean) => {
  61. const newInputs = produce(inputs, (draft) => {
  62. draft.is_parallel = value
  63. })
  64. setInputs(newInputs)
  65. }, [inputs, setInputs])
  66. const changeErrorResponseMode = useCallback((item: Item) => {
  67. const newInputs = produce(inputs, (draft) => {
  68. draft.error_handle_mode = item.value as ErrorHandleMode
  69. })
  70. setInputs(newInputs)
  71. }, [inputs, setInputs])
  72. const changeParallelNums = useCallback((num: number) => {
  73. const newInputs = produce(inputs, (draft) => {
  74. draft.parallel_nums = num
  75. })
  76. setInputs(newInputs)
  77. }, [inputs, setInputs])
  78. return {
  79. readOnly,
  80. inputs,
  81. filterInputVar,
  82. handleInputChange,
  83. childrenNodeVars,
  84. iterationChildrenNodes,
  85. handleOutputVarChange,
  86. changeParallel,
  87. changeErrorResponseMode,
  88. changeParallelNums,
  89. }
  90. }
  91. export default useConfig