|
@@ -10,9 +10,10 @@ import ContentCopyIcon from '@mui/icons-material/ContentCopy';
|
|
|
import DeleteOutlineIcon from '@mui/icons-material/DeleteOutline';
|
|
|
import Menu from '@mui/material/Menu';
|
|
|
import MenuItem from '@mui/material/MenuItem';
|
|
|
+import Divider from '@mui/material/Divider';
|
|
|
import { CopyToClipboard } from 'react-copy-to-clipboard';
|
|
|
-import { removeMessageById } from "../../../../../../api-data";
|
|
|
-import { timeStampMessage, timeStampEU,handleDownload,copied } from '../../../../../../helpers'
|
|
|
+import { removeMessageById,updateMessageById } from "../../../../../../api-data";
|
|
|
+import { timeStampMessage, timeStampEU,handleDownload,copied,emojisArr } from '../../../../../../helpers'
|
|
|
|
|
|
const StyledMenu = styled((props:any) => (
|
|
|
<Menu
|
|
@@ -225,7 +226,43 @@ const useStyles = makeStyles({
|
|
|
zIndex: 100,
|
|
|
backgroundColor: 'rgba(104, 105, 104, 0.6)',
|
|
|
overflowY: 'hidden',
|
|
|
- },
|
|
|
+ },
|
|
|
+ emojiTitle: {
|
|
|
+ position: "absolute",
|
|
|
+ fontSize: "1.7em",
|
|
|
+ fontWeight:600,
|
|
|
+ bottom: 0,
|
|
|
+ right: -40,
|
|
|
+ },
|
|
|
+ emojiCompanionTitle: {
|
|
|
+ position: "absolute",
|
|
|
+ fontSize: "1.7em",
|
|
|
+ fontWeight:600,
|
|
|
+ bottom: '2rem',
|
|
|
+ right: -40,
|
|
|
+ },
|
|
|
+ emoji: {
|
|
|
+ cursor: 'pointer',
|
|
|
+ fontSize: '1.7rem',
|
|
|
+ transition: 'all 0.3s',
|
|
|
+ '&:hover': {
|
|
|
+ transform: 'scale(1.5)'
|
|
|
+ }
|
|
|
+ },
|
|
|
+ emojiActive: {
|
|
|
+ cursor: 'pointer',
|
|
|
+ fontSize: '1.2rem',
|
|
|
+ animation: `$emoji 0.6s ease-out`,
|
|
|
+ animationDirection: 'forwards',
|
|
|
+ animationIterationCount: 1,
|
|
|
+ },
|
|
|
+ '@keyframes emoji': {
|
|
|
+ '5%': { transform: 'translateY(1rem)'},
|
|
|
+ '10%': { transform: 'translateY(0) scale(1)',opacity: 1},
|
|
|
+ '50%': { transform: 'translateY(-4rem) scale(1.5) rotateY(90deg)'},
|
|
|
+ '80%': {opacity: 0},
|
|
|
+ '100%': {transform: 'translateY(-8rem) scale(2) rotateY(180deg)',opacity: 0},
|
|
|
+ },
|
|
|
});
|
|
|
|
|
|
interface IMessagesLeftImage {
|
|
@@ -235,15 +272,18 @@ interface IMessagesLeftImage {
|
|
|
message: string,
|
|
|
messages: any,
|
|
|
fullType: string,
|
|
|
- caption :string,
|
|
|
+ caption: string,
|
|
|
+ emoji: string,
|
|
|
+ emojiCompanion: string,
|
|
|
_id:string
|
|
|
}
|
|
|
|
|
|
-const MessagesLeftImage = ({url,createdAt,color,message,messages,fullType,caption,_id}:IMessagesLeftImage) => {
|
|
|
+const MessagesLeftImage = ({url,createdAt,color,message,messages,fullType,caption,emoji,emojiCompanion,_id}:IMessagesLeftImage) => {
|
|
|
const classes = useStyles();
|
|
|
const [watch, setWatch] = useState<boolean>(false)
|
|
|
const [anchorEl, setAnchorEl] = useState<any>(null);
|
|
|
const [selected, setSelected] = useState<boolean>(false);
|
|
|
+ const [emojiIndex, setEmojiIndex] = useState<string | null>(null);
|
|
|
const [modal,setModal] = useState<boolean>(false)
|
|
|
const open = Boolean(anchorEl);
|
|
|
const handleOpenWatch = () => !watch&&setWatch(true)
|
|
@@ -267,7 +307,19 @@ const MessagesLeftImage = ({url,createdAt,color,message,messages,fullType,captio
|
|
|
e.preventDefault()
|
|
|
setAnchorEl(e.currentTarget)
|
|
|
setSelected(true)
|
|
|
- }
|
|
|
+ }
|
|
|
+
|
|
|
+ const handleEmojiMenu = ({ target }: any): void => {
|
|
|
+ const idEmoji = target.id
|
|
|
+ if (idEmoji === emoji) {
|
|
|
+ updateMessageById(_id,'')
|
|
|
+ setEmojiIndex(null)
|
|
|
+ } else {
|
|
|
+ updateMessageById(_id,idEmoji)
|
|
|
+ setEmojiIndex(idEmoji)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
return (watch ?
|
|
|
<div onClick={handleCloseWatch} id='overlay' className={classes.overlay}>
|
|
|
<div className={classes.wrapperOverlayImg}>
|
|
@@ -287,9 +339,16 @@ const MessagesLeftImage = ({url,createdAt,color,message,messages,fullType,captio
|
|
|
<FileDownloadIcon fontSize='medium'/>
|
|
|
</IconButton>
|
|
|
<div className={classes.time}>{timeStampMessage(createdAt)}</div>
|
|
|
+ {emojiCompanion && <div className={classes.emojiCompanionTitle}>{emojisArr[Number(emojiCompanion)]}</div>}
|
|
|
+ {emoji && <div className={classes.emojiTitle}>{emojisArr[Number(emoji)]}</div>}
|
|
|
<div className={classes.caption}>{caption}</div>
|
|
|
<StyledMenu id="demo-positioned-menu" aria-labelledby="demo-positioned-button"
|
|
|
- anchorEl={anchorEl} open={open} onClose={handleClose}>
|
|
|
+ anchorEl={anchorEl} open={open} onClose={handleClose}>
|
|
|
+ <MenuItem onClick={handleEmojiMenu} style={{ cursor: 'none' }} >
|
|
|
+ {emojisArr.map((el:string, i:number) =>
|
|
|
+ <div key={el} className={emoji === String(i)?classes.emojiActive:classes.emoji} id={String(i)}>{el}</div>)}
|
|
|
+ </MenuItem>
|
|
|
+ <Divider/>
|
|
|
<CopyToClipboard onCopy={() => handleClose('copy')} text={url}>
|
|
|
<MenuItem>
|
|
|
<ContentCopyIcon />
|