param-config.tsx 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. 'use client'
  2. import { memo, useState } from 'react'
  3. import { useTranslation } from 'react-i18next'
  4. import cn from 'classnames'
  5. import type { OnFeaturesChange } from '../../types'
  6. import ParamConfigContent from './param-config-content'
  7. import { Settings01 } from '@/app/components/base/icons/src/vender/line/general'
  8. import {
  9. PortalToFollowElem,
  10. PortalToFollowElemContent,
  11. PortalToFollowElemTrigger,
  12. } from '@/app/components/base/portal-to-follow-elem'
  13. type ParamsConfigProps = {
  14. onChange?: OnFeaturesChange
  15. disabled?: boolean
  16. }
  17. const ParamsConfig = ({
  18. onChange,
  19. disabled,
  20. }: ParamsConfigProps) => {
  21. const { t } = useTranslation()
  22. const [open, setOpen] = useState(false)
  23. return (
  24. <PortalToFollowElem
  25. open={open}
  26. onOpenChange={setOpen}
  27. placement='bottom-end'
  28. offset={{
  29. mainAxis: 4,
  30. }}
  31. >
  32. <PortalToFollowElemTrigger onClick={() => !disabled && setOpen(v => !v)}>
  33. <div className={cn('flex items-center rounded-md h-7 px-3 space-x-1 text-gray-700 cursor-pointer hover:bg-gray-200', open && 'bg-gray-200', disabled && 'cursor-not-allowed opacity-50')}>
  34. <Settings01 className='w-3.5 h-3.5 ' />
  35. <div className='ml-1 leading-[18px] text-xs font-medium '>{t('appDebug.voice.settings')}</div>
  36. </div>
  37. </PortalToFollowElemTrigger>
  38. <PortalToFollowElemContent style={{ zIndex: 50 }}>
  39. <div className='w-80 sm:w-[412px] p-4 bg-white rounded-lg border-[0.5px] border-gray-200 shadow-lg space-y-3'>
  40. <ParamConfigContent onChange={onChange} />
  41. </div>
  42. </PortalToFollowElemContent>
  43. </PortalToFollowElem>
  44. )
  45. }
  46. export default memo(ParamsConfig)