mobile-operation-dropdown.tsx 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import { useState } from 'react'
  2. import { useTranslation } from 'react-i18next'
  3. import {
  4. RiMoreFill,
  5. } from '@remixicon/react'
  6. import { PortalToFollowElem, PortalToFollowElemContent, PortalToFollowElemTrigger } from '@/app/components/base/portal-to-follow-elem'
  7. import ActionButton, { ActionButtonState } from '@/app/components/base/action-button'
  8. type Props = {
  9. handleResetChat: () => void
  10. handleViewChatSettings: () => void
  11. }
  12. const MobileOperationDropdown = ({
  13. handleResetChat,
  14. handleViewChatSettings,
  15. }: Props) => {
  16. const { t } = useTranslation()
  17. const [open, setOpen] = useState(false)
  18. return (
  19. <PortalToFollowElem
  20. open={open}
  21. onOpenChange={setOpen}
  22. placement='bottom-end'
  23. offset={{
  24. mainAxis: 4,
  25. crossAxis: -4,
  26. }}
  27. >
  28. <PortalToFollowElemTrigger
  29. onClick={() => setOpen(v => !v)}
  30. >
  31. <ActionButton size='l' state={open ? ActionButtonState.Hover : ActionButtonState.Default}>
  32. <RiMoreFill className='w-[18px] h-[18px]' />
  33. </ActionButton>
  34. </PortalToFollowElemTrigger>
  35. <PortalToFollowElemContent className="z-40">
  36. <div
  37. className={'min-w-[160px] p-1 bg-components-panel-bg-blur backdrop-blur-sm rounded-xl border-[0.5px] border-components-panel-border shadow-lg'}
  38. >
  39. <div className='flex items-center space-x-1 px-3 py-1.5 rounded-lg text-text-secondary system-md-regular cursor-pointer hover:bg-state-base-hover' onClick={handleResetChat}>
  40. <span className='grow'>{t('share.chat.resetChat')}</span>
  41. </div>
  42. <div className='flex items-center space-x-1 px-3 py-1.5 rounded-lg text-text-secondary system-md-regular cursor-pointer hover:bg-state-base-hover' onClick={handleViewChatSettings}>
  43. <span className='grow'>{t('share.chat.viewChatSettings')}</span>
  44. </div>
  45. </div>
  46. </PortalToFollowElemContent>
  47. </PortalToFollowElem>
  48. )
  49. }
  50. export default MobileOperationDropdown