Message.jsx 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. import { memo, useState } from "react";
  2. import MessageOptions from "../MessageOptions/MessageOptions";
  3. import { ReplyMessage } from "../ReplyMessage/ReplyMessage";
  4. import { convert } from "../Time/Time";
  5. import { ForwardedMessageHeader, MessageContainer, MessageFooter, MessageOwner, MessageText, MessageWrapper, TimeMessage } from "./Message.style";
  6. import { MemoMessageMediaContainer } from "../MessageMediaContainer/MessageMediaContainer";
  7. const Message = ({mes, chatId, currUser, lastElem}) => {
  8. const isOwner = currUser === mes?.owner?._id ? true : false;
  9. const checkedMessage = mes.forwarded ? mes.forwarded : mes; //check message (it has forwarded message or not, if it has return forwarded mes)
  10. const [anchorEl, setAnchorEl] = useState(null);
  11. const open = Boolean(anchorEl);
  12. const handleClick = (event) => {
  13. setAnchorEl(event.currentTarget);
  14. };
  15. const handleClose = () => {
  16. setAnchorEl(null)
  17. };
  18. return (
  19. <MessageWrapper >
  20. <MessageContainer isOwner={isOwner} onContextMenu={(e) => {e.preventDefault(); handleClick(e)}} lastElem={lastElem}>
  21. {mes.forwarded && <ForwardedMessageHeader owner={isOwner}>{`Forwarded from ${checkedMessage?.owner?.nick || ''}`}</ForwardedMessageHeader>}
  22. {checkedMessage?.replyTo && <ReplyMessage owner={isOwner} message={checkedMessage.replyTo}/>}
  23. {checkedMessage?.media && checkedMessage?.media?.length !==0 && <MemoMessageMediaContainer media={checkedMessage.media}/>}
  24. <MessageText>{checkedMessage?.text?.replace(/ /g, "\u00a0") || ''}</MessageText>
  25. <MessageFooter>
  26. <MessageOwner>{isOwner ? 'You' : mes.owner.nick || 'nick'}</MessageOwner>
  27. <TimeMessage owner={isOwner}>{convert(mes.createdAt).getTime()}</TimeMessage>
  28. </MessageFooter>
  29. </MessageContainer>
  30. <MessageOptions message={checkedMessage} chatId={chatId} handleClose={handleClose} open={open} anchorEl={anchorEl}/>
  31. </MessageWrapper>
  32. )
  33. }
  34. export default memo(Message)