diff --git a/client/src/components/Message.tsx b/client/src/components/Message.tsx index d4702f9..dbf1e65 100644 --- a/client/src/components/Message.tsx +++ b/client/src/components/Message.tsx @@ -38,7 +38,7 @@ const Message = ({ message }: any) => { return ( <>
{message.author && } diff --git a/client/src/components/ScrollToBottom.tsx b/client/src/components/ScrollToBottom.tsx index 6274c68..de73a92 100644 --- a/client/src/components/ScrollToBottom.tsx +++ b/client/src/components/ScrollToBottom.tsx @@ -21,7 +21,8 @@ const ScrollToBottom = ({ children, className = '' }: { children: ReactNode; cla setShow(false); } }); - container?.addEventListener('DOMNodeInserted', () => { + container?.addEventListener('DOMNodeInserted', (e) => { + if (!(e.target as Element).classList.contains('message')) return; if (node?.getBoundingClientRect() && node.getBoundingClientRect().y >= window.innerHeight) { node?.scrollIntoView({ behavior: 'smooth' }); } diff --git a/client/src/components/User.tsx b/client/src/components/User.tsx index aee8875..faa8ce0 100644 --- a/client/src/components/User.tsx +++ b/client/src/components/User.tsx @@ -1,28 +1,84 @@ -import { useState } from 'react'; +import { useEffect, useState } from 'react'; import Modal from './Modal'; const User = ({ author }: any) => { const [show, setShow] = useState(false); + const [popupPos, setPopupPos] = useState({ posX: 0, posY: 0 }); + const [messageId, setMessageId] = useState('0'); + + function handleContextMenu(e: any) { + + if (messageId!== '0' && e.target.closest('.message')?.id.slice(9) !== messageId) { + setPopupPos({ posX: 0, posY: 0}); + setMessageId('0'); + document.removeEventListener('contextmenu', handleContextMenu); + } + } + document.addEventListener('contextmenu', handleContextMenu); + + function handleClick(e: any) { + if (e.target.closest('.user') === null) { + setPopupPos({ posX: 0, posY: 0 }); + setMessageId('0'); + document.removeEventListener('click', handleClick); + } + } + + document.addEventListener('click', handleClick); + + const handleRightClick = (e: any) => { + e.preventDefault(); + setMessageId(e.target.closest('.message').id.slice(9)); + + setPopupPos({ posX: e.clientX, posY: e.clientY }); + }; return ( - <> - + {popupPos.posX !== 0 && ( +
+
+ +
+
+ )}
-
User info
-
First name: {author.firstName}
-
Last name: {author.lastName}
-
Email: {author.email}
+
Info utilisateur
+
Nom: {author.lastName}
+
Prenom: {author.firstName}
+
+ Adresse mail: {author.email} +
-
- +
); };