panel.tsx 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import type { FC } from 'react'
  2. import React from 'react'
  3. import { useTranslation } from 'react-i18next'
  4. import Split from '../_base/components/split'
  5. import AddButton from '../_base/components/add-button'
  6. import useConfig from './use-config'
  7. import ConditionList from './components/condition-list'
  8. import type { IfElseNodeType } from './types'
  9. import Field from '@/app/components/workflow/nodes/_base/components/field'
  10. import type { NodePanelProps } from '@/app/components/workflow/types'
  11. const i18nPrefix = 'workflow.nodes.ifElse'
  12. const Panel: FC<NodePanelProps<IfElseNodeType>> = ({
  13. id,
  14. data,
  15. }) => {
  16. const { t } = useTranslation()
  17. const {
  18. readOnly,
  19. inputs,
  20. handleConditionsChange,
  21. handleAddCondition,
  22. handleLogicalOperatorToggle,
  23. varTypesList,
  24. filterVar,
  25. } = useConfig(id, data)
  26. return (
  27. <div className='mt-2'>
  28. <div className='px-4 pb-4 space-y-4'>
  29. <Field
  30. title={t(`${i18nPrefix}.if`)}
  31. >
  32. <>
  33. <ConditionList
  34. className='mt-2'
  35. readonly={readOnly}
  36. nodeId={id}
  37. list={inputs.conditions}
  38. onChange={handleConditionsChange}
  39. logicalOperator={inputs.logical_operator}
  40. onLogicalOperatorToggle={handleLogicalOperatorToggle}
  41. varTypesList={varTypesList}
  42. filterVar={filterVar}
  43. />
  44. {!readOnly && (
  45. <AddButton
  46. className='mt-3'
  47. text={t(`${i18nPrefix}.addCondition`)}
  48. onClick={handleAddCondition}
  49. />
  50. )}
  51. </>
  52. </Field>
  53. <Split />
  54. <Field
  55. title={t(`${i18nPrefix}.else`)}
  56. >
  57. <div className='leading-[18px] text-xs font-normal text-gray-400'>{t(`${i18nPrefix}.elseDescription`)}</div>
  58. </Field>
  59. </div>
  60. </div>
  61. )
  62. }
  63. export default React.memo(Panel)