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

use-single-run-form-params.ts 2.2KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import type { MutableRefObject } from 'react'
  2. import type { InputVar, Variable } from '@/app/components/workflow/types'
  3. import { useCallback, useMemo } from 'react'
  4. import useNodeCrud from '../_base/hooks/use-node-crud'
  5. import type { HttpNodeType } from './types'
  6. type Params = {
  7. id: string,
  8. payload: HttpNodeType,
  9. runInputData: Record<string, any>
  10. runInputDataRef: MutableRefObject<Record<string, any>>
  11. getInputVars: (textList: string[]) => InputVar[]
  12. setRunInputData: (data: Record<string, any>) => void
  13. toVarInputs: (variables: Variable[]) => InputVar[]
  14. }
  15. const useSingleRunFormParams = ({
  16. id,
  17. payload,
  18. runInputData,
  19. getInputVars,
  20. setRunInputData,
  21. }: Params) => {
  22. const { inputs } = useNodeCrud<HttpNodeType>(id, payload)
  23. const fileVarInputs = useMemo(() => {
  24. if (!Array.isArray(inputs.body.data))
  25. return ''
  26. const res = inputs.body.data
  27. .filter(item => item.file?.length)
  28. .map(item => item.file ? `{{#${item.file.join('.')}#}}` : '')
  29. .join(' ')
  30. return res
  31. }, [inputs.body.data])
  32. const varInputs = getInputVars([
  33. inputs.url,
  34. inputs.headers,
  35. inputs.params,
  36. typeof inputs.body.data === 'string' ? inputs.body.data : inputs.body.data?.map(item => item.value).join(''),
  37. fileVarInputs,
  38. ])
  39. const setInputVarValues = useCallback((newPayload: Record<string, any>) => {
  40. setRunInputData(newPayload)
  41. }, [setRunInputData])
  42. const inputVarValues = (() => {
  43. const vars: Record<string, any> = {}
  44. Object.keys(runInputData)
  45. .forEach((key) => {
  46. vars[key] = runInputData[key]
  47. })
  48. return vars
  49. })()
  50. const forms = useMemo(() => {
  51. return [
  52. {
  53. inputs: varInputs,
  54. values: inputVarValues,
  55. onChange: setInputVarValues,
  56. },
  57. ]
  58. }, [inputVarValues, setInputVarValues, varInputs])
  59. const getDependentVars = () => {
  60. return varInputs.map((item) => {
  61. // Guard against null/undefined variable to prevent app crash
  62. if (!item.variable || typeof item.variable !== 'string')
  63. return []
  64. return item.variable.slice(1, -1).split('.')
  65. }).filter(arr => arr.length > 0)
  66. }
  67. return {
  68. forms,
  69. getDependentVars,
  70. }
  71. }
  72. export default useSingleRunFormParams