You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

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

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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 => item.variable.slice(1, -1).split('.'))
  61. }
  62. return {
  63. forms,
  64. getDependentVars,
  65. }
  66. }
  67. export default useSingleRunFormParams