選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

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

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. import type { MutableRefObject } from 'react'
  2. import type { InputVar, ValueSelector, Variable } from '@/app/components/workflow/types'
  3. import { useCallback } from 'react'
  4. import type { VariableAssignerNodeType } from './types'
  5. type Params = {
  6. id: string,
  7. payload: VariableAssignerNodeType,
  8. runInputData: Record<string, any>
  9. runInputDataRef: MutableRefObject<Record<string, any>>
  10. getInputVars: (textList: string[]) => InputVar[]
  11. setRunInputData: (data: Record<string, any>) => void
  12. toVarInputs: (variables: Variable[]) => InputVar[]
  13. varSelectorsToVarInputs: (variables: ValueSelector[]) => InputVar[]
  14. }
  15. const useSingleRunFormParams = ({
  16. payload,
  17. runInputData,
  18. setRunInputData,
  19. varSelectorsToVarInputs,
  20. }: Params) => {
  21. const setInputVarValues = useCallback((newPayload: Record<string, any>) => {
  22. setRunInputData(newPayload)
  23. }, [setRunInputData])
  24. const inputVarValues = (() => {
  25. const vars: Record<string, any> = {}
  26. Object.keys(runInputData)
  27. .forEach((key) => {
  28. vars[key] = runInputData[key]
  29. })
  30. return vars
  31. })()
  32. const forms = (() => {
  33. const allInputs: ValueSelector[] = []
  34. const isGroupEnabled = !!payload.advanced_settings?.group_enabled
  35. if (!isGroupEnabled && payload.variables && payload.variables.length) {
  36. payload.variables.forEach((varSelector) => {
  37. allInputs.push(varSelector)
  38. })
  39. }
  40. if (isGroupEnabled && payload.advanced_settings && payload.advanced_settings.groups && payload.advanced_settings.groups.length) {
  41. payload.advanced_settings.groups.forEach((group) => {
  42. group.variables?.forEach((varSelector) => {
  43. allInputs.push(varSelector)
  44. })
  45. })
  46. }
  47. const varInputs = varSelectorsToVarInputs(allInputs)
  48. // remove duplicate inputs
  49. const existVarsKey: Record<string, boolean> = {}
  50. const uniqueVarInputs: InputVar[] = []
  51. varInputs.forEach((input) => {
  52. if(!input)
  53. return
  54. if (!existVarsKey[input.variable]) {
  55. existVarsKey[input.variable] = true
  56. uniqueVarInputs.push({
  57. ...input,
  58. required: false, // just one of the inputs is required
  59. })
  60. }
  61. })
  62. return [
  63. {
  64. inputs: uniqueVarInputs,
  65. values: inputVarValues,
  66. onChange: setInputVarValues,
  67. },
  68. ]
  69. })()
  70. const getDependentVars = () => {
  71. if(payload.advanced_settings?.group_enabled) {
  72. const vars: ValueSelector[][] = []
  73. payload.advanced_settings.groups.forEach((group) => {
  74. if(group.variables)
  75. vars.push([...group.variables])
  76. })
  77. return vars
  78. }
  79. return [payload.variables]
  80. }
  81. return {
  82. forms,
  83. getDependentVars,
  84. }
  85. }
  86. export default useSingleRunFormParams