panel.tsx 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. import type { FC } from 'react'
  2. import React from 'react'
  3. import { useTranslation } from 'react-i18next'
  4. import VarReferencePicker from '../_base/components/variable/var-reference-picker'
  5. import OptionCard from '../_base/components/option-card'
  6. import useConfig from './use-config'
  7. import { WriteMode } from './types'
  8. import type { AssignerNodeType } from './types'
  9. import Field from '@/app/components/workflow/nodes/_base/components/field'
  10. import { type NodePanelProps } from '@/app/components/workflow/types'
  11. import cn from '@/utils/classnames'
  12. const i18nPrefix = 'workflow.nodes.assigner'
  13. const Panel: FC<NodePanelProps<AssignerNodeType>> = ({
  14. id,
  15. data,
  16. }) => {
  17. const { t } = useTranslation()
  18. const {
  19. readOnly,
  20. inputs,
  21. handleAssignedVarChanges,
  22. isSupportAppend,
  23. writeModeTypes,
  24. handleWriteModeChange,
  25. filterAssignedVar,
  26. filterToAssignedVar,
  27. handleToAssignedVarChange,
  28. toAssignedVarType,
  29. } = useConfig(id, data)
  30. return (
  31. <div className='mt-2'>
  32. <div className='px-4 pb-4 space-y-4'>
  33. <Field
  34. title={t(`${i18nPrefix}.assignedVariable`)}
  35. >
  36. <VarReferencePicker
  37. readonly={readOnly}
  38. nodeId={id}
  39. isShowNodeName
  40. value={inputs.assigned_variable_selector || []}
  41. onChange={handleAssignedVarChanges}
  42. filterVar={filterAssignedVar}
  43. />
  44. </Field>
  45. <Field
  46. title={t(`${i18nPrefix}.writeMode`)}
  47. tooltip={t(`${i18nPrefix}.writeModeTip`)!}
  48. >
  49. <div className={cn('grid gap-2 grid-cols-3')}>
  50. {writeModeTypes.map(type => (
  51. <OptionCard
  52. key={type}
  53. title={t(`${i18nPrefix}.${type}`)}
  54. onSelect={handleWriteModeChange(type)}
  55. selected={inputs.write_mode === type}
  56. disabled={!isSupportAppend && type === WriteMode.Append}
  57. />
  58. ))}
  59. </div>
  60. </Field>
  61. {inputs.write_mode !== WriteMode.Clear && (
  62. <Field
  63. title={t(`${i18nPrefix}.setVariable`)}
  64. >
  65. <VarReferencePicker
  66. readonly={readOnly}
  67. nodeId={id}
  68. isShowNodeName
  69. value={inputs.input_variable_selector || []}
  70. onChange={handleToAssignedVarChange}
  71. filterVar={filterToAssignedVar}
  72. valueTypePlaceHolder={toAssignedVarType}
  73. />
  74. </Field>
  75. )}
  76. </div>
  77. </div>
  78. )
  79. }
  80. export default React.memo(Panel)