variable-trigger.tsx 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. 'use client'
  2. import React from 'react'
  3. import { useTranslation } from 'react-i18next'
  4. import { RiAddLine } from '@remixicon/react'
  5. import Button from '@/app/components/base/button'
  6. import VariableModal from '@/app/components/workflow/panel/env-panel/variable-modal'
  7. // import cn from '@/utils/classnames'
  8. import {
  9. PortalToFollowElem,
  10. PortalToFollowElemContent,
  11. PortalToFollowElemTrigger,
  12. } from '@/app/components/base/portal-to-follow-elem'
  13. import type { EnvironmentVariable } from '@/app/components/workflow/types'
  14. type Props = {
  15. open: boolean
  16. setOpen: (value: React.SetStateAction<boolean>) => void
  17. env?: EnvironmentVariable
  18. onClose: () => void
  19. onSave: (env: EnvironmentVariable) => void
  20. }
  21. const VariableTrigger = ({
  22. open,
  23. setOpen,
  24. env,
  25. onClose,
  26. onSave,
  27. }: Props) => {
  28. const { t } = useTranslation()
  29. return (
  30. <PortalToFollowElem
  31. open={open}
  32. onOpenChange={() => {
  33. setOpen(v => !v)
  34. open && onClose()
  35. }}
  36. placement='left-start'
  37. offset={{
  38. mainAxis: 8,
  39. alignmentAxis: -104,
  40. }}
  41. >
  42. <PortalToFollowElemTrigger onClick={() => {
  43. setOpen(v => !v)
  44. open && onClose()
  45. }}>
  46. <Button variant='primary'>
  47. <RiAddLine className='mr-1 w-4 h-4' />
  48. <span className='system-sm-medium'>{t('workflow.env.envPanelButton')}</span>
  49. </Button>
  50. </PortalToFollowElemTrigger>
  51. <PortalToFollowElemContent className='z-[11]'>
  52. <VariableModal
  53. env={env}
  54. onSave={onSave}
  55. onClose={() => {
  56. onClose()
  57. setOpen(false)
  58. }}
  59. />
  60. </PortalToFollowElemContent>
  61. </PortalToFollowElem>
  62. )
  63. }
  64. export default VariableTrigger