message-dropdown.tsx 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import {
  2. Dropdown,
  3. DropdownItem,
  4. DropdownMenu,
  5. DropdownToggle,
  6. } from '@/shared/components/dropdown/dropdown-menu'
  7. import MaterialIcon from '@/shared/components/material-icon'
  8. import { useTranslation } from 'react-i18next'
  9. import DropdownListItem from '@/shared/components/dropdown/dropdown-list-item'
  10. import { Message, useChatContext } from '@/features/chat/context/chat-context'
  11. import { useModalsContext } from '@/features/ide-react/context/modals-context'
  12. import { useCallback } from 'react'
  13. export default function MessageDropdown({ message }: { message: Message }) {
  14. const { t } = useTranslation()
  15. const { deleteMessage, startedEditingMessage } = useChatContext()
  16. const { showGenericConfirmModal } = useModalsContext()
  17. const deleteButtonHandler = useCallback(() => {
  18. showGenericConfirmModal({
  19. title: t('delete_message'),
  20. message: t('delete_message_confirmation'),
  21. onConfirm: () => {
  22. deleteMessage(message.id)
  23. },
  24. })
  25. }, [deleteMessage, message.id, showGenericConfirmModal, t])
  26. const editButtonHandler = useCallback(() => {
  27. startedEditingMessage(message.id)
  28. }, [message.id, startedEditingMessage])
  29. return (
  30. <Dropdown align="end" className="message-dropdown float-end">
  31. <DropdownToggle bsPrefix="message-dropdown-menu-btn">
  32. <MaterialIcon type="more_vert" accessibilityLabel={t('actions')} />
  33. </DropdownToggle>
  34. <DropdownMenu
  35. className="message-dropdown-menu"
  36. // Make the dropdown appear overlap with the button slightly so that the
  37. // menu stays visible when the user moves their cursor into the menu
  38. // when the menu is positioned above the button
  39. popperConfig={{
  40. modifiers: [{ name: 'offset', options: { offset: [0, -3] } }],
  41. }}
  42. >
  43. <DropdownListItem>
  44. <DropdownItem as="button" onClick={editButtonHandler}>
  45. {t('edit')}
  46. </DropdownItem>
  47. <DropdownItem as="button" onClick={deleteButtonHandler}>
  48. {t('delete')}
  49. </DropdownItem>
  50. </DropdownListItem>
  51. </DropdownMenu>
  52. </Dropdown>
  53. )
  54. }