condition-add.tsx 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import {
  2. useCallback,
  3. useState,
  4. } from 'react'
  5. import { useTranslation } from 'react-i18next'
  6. import { RiAddLine } from '@remixicon/react'
  7. import type { HandleAddCondition } from '../types'
  8. import Button from '@/app/components/base/button'
  9. import {
  10. PortalToFollowElem,
  11. PortalToFollowElemContent,
  12. PortalToFollowElemTrigger,
  13. } from '@/app/components/base/portal-to-follow-elem'
  14. import VarReferenceVars from '@/app/components/workflow/nodes/_base/components/variable/var-reference-vars'
  15. import type {
  16. NodeOutPutVar,
  17. ValueSelector,
  18. Var,
  19. } from '@/app/components/workflow/types'
  20. type ConditionAddProps = {
  21. className?: string
  22. caseId: string
  23. variables: NodeOutPutVar[]
  24. onSelectVariable: HandleAddCondition
  25. disabled?: boolean
  26. }
  27. const ConditionAdd = ({
  28. className,
  29. caseId,
  30. variables,
  31. onSelectVariable,
  32. disabled,
  33. }: ConditionAddProps) => {
  34. const { t } = useTranslation()
  35. const [open, setOpen] = useState(false)
  36. const handleSelectVariable = useCallback((valueSelector: ValueSelector, varItem: Var) => {
  37. onSelectVariable(caseId, valueSelector, varItem)
  38. setOpen(false)
  39. }, [caseId, onSelectVariable, setOpen])
  40. return (
  41. <PortalToFollowElem
  42. open={open}
  43. onOpenChange={setOpen}
  44. placement='bottom-start'
  45. offset={{
  46. mainAxis: 4,
  47. crossAxis: 0,
  48. }}
  49. >
  50. <PortalToFollowElemTrigger onClick={() => setOpen(!open)}>
  51. <Button
  52. size='small'
  53. className={className}
  54. disabled={disabled}
  55. >
  56. <RiAddLine className='mr-1 w-3.5 h-3.5' />
  57. {t('workflow.nodes.ifElse.addCondition')}
  58. </Button>
  59. </PortalToFollowElemTrigger>
  60. <PortalToFollowElemContent className='z-[1000]'>
  61. <div className='w-[296px] bg-components-panel-bg-blur rounded-lg border-[0.5px] border-components-panel-border shadow-lg'>
  62. <VarReferenceVars
  63. vars={variables}
  64. isSupportFileVar
  65. onChange={handleSelectVariable}
  66. />
  67. </div>
  68. </PortalToFollowElemContent>
  69. </PortalToFollowElem>
  70. )
  71. }
  72. export default ConditionAdd