Ver código fonte

private chats

serg1557733 1 ano atrás
pai
commit
8309927b54

+ 29 - 2
backend/app.js

@@ -269,6 +269,22 @@ io.on("connection", async (socket) => {
 
     io.emit('usersOnline', users); // send array online users  
 
+    //send private chats for user
+
+    const privateChats = await PrivateMessage.find( {$or:[ {toUser: dbUser._id}, {fromUser: dbUser._id }],foreignField: '_id'}).populate( ['fromUser','toUser'])//need to optimal way found
+
+    const myChats = []
+privateChats.map((item, i) => {
+    console.log(item.fromUser.userName, i)
+    
+})
+///
+
+// console.log(myChats)
+// console.log(users)
+
+socket.emit('my chats', myChats)
+
     socket.emit('connected', dbUser); //socket.user
   
     if(socket.user.isAdmin){
@@ -278,6 +294,10 @@ io.on("connection", async (socket) => {
     const messagesToShow = await Message.find({}).sort({ 'createDate': -1 }).limit(20).populate( {path:'user'});   
     socket.emit('allmessages', messagesToShow.reverse());
 
+
+
+    
+
     socket.on("message", async (data) => {
         const dateNow = Date.now(); // for correct working latest post 
         const post = await Message.findOne({userName}).sort({ 'createDate': -1 })
@@ -361,9 +381,15 @@ io.on("connection", async (socket) => {
                 toUser
             });
             await privateMessage.save()
-
           //emit event 
-            socket.to(to).emit("private message", {privateMessage, fromUser});
+            socket.to(to).emit("private message", privateMessage);
+            
+            // //send new messages arrey to user
+
+            // const privateMessagesToUser = await PrivateMessage.find({toUser: {$in:[fromUser._id, toUser._id]}, fromUser: {$in:[fromUser._id, toUser._id]}}).sort({ 'createDate': 1 })
+
+            // socket.emit('send privat messages', {privateMessagesToUser, fromUser})
+
           });
 
 
@@ -374,6 +400,7 @@ io.on("connection", async (socket) => {
             //find user from in db
             //compare users and if messages is - send 
             socket.emit('send privat messages', privateMessagesToUser)
+            
           })
 
     

+ 5 - 4
frontend/src/components/chatPage/ChatPage.jsx

@@ -104,7 +104,8 @@ export const ChatPage = () => {
     useEffect(() => {
    
         if(token){
-            SOCKET_EVENTS.map(event => dispatch(getSocket(event)))   
+            ['allmessages', 'usersOnline', 'allDbUsers'].map(event => dispatch(getSocket(event)))  //use const SOCKETS EVENT
+            console.log('socket events') 
         }
     }, [token, editOldMessage, showUserInfoBox])
 
@@ -171,9 +172,9 @@ export const ChatPage = () => {
                         onSubmit = {e  => {
                                         e.preventDefault()
                                         if (message.message.length){
-                                            isPrivatChat? sendPrivateMessage() : dispatch(sendMessage({user, socket}))
-                                            dispatch(getSocket('allmessages'))
-                                            dispatch(editMessage({editMessage: ''}))
+                                            isPrivatChat? sendPrivateMessage() : dispatch(sendMessage({user, socket}));
+                                            isPrivatChat && dispatch(getSocket('allmessages'))
+                                            isPrivatChat &&dispatch(editMessage({editMessage: ''}))
                                             setMessage({message: ''})
                                             play()
                                         }

+ 8 - 19
frontend/src/components/chatPage/privateChat/PrivateChat.jsx

@@ -19,26 +19,20 @@ export const PrivateChat = () => {
     const SERVER_URL =process.env.REACT_APP_SERVER_URL
 
     const user = useSelector(state => state.getUserSocketReducer.socketUserData)
-    const usersOnline = useSelector(state => state.getUserSocketReducer.usersOnline)
-
-    const userNamesOnlineSet =  new Set(usersOnline.map( i => i.userName))
-
     const storeMessageId = useSelector(state => state.messageReducer.messageId)
 
-
     const [startMessages, setStartMessages] = useState([])   
     let endMessages = useRef(null);
 
 socket.on('send privat messages', (messages)=> {
+    console.log(messages)
     setStartMessages(messages)
   });
 
-  const newMessages = [];
 
   ///need to test not working
-socket.on("private message", (message, from)=> {
-    newMessages.push(message)
-    console.log(newMessages)
+socket.on("private message", (message)=> {
+    startMessages.push(message)
   });  
   
 
@@ -46,27 +40,20 @@ socket.on("private message", (message, from)=> {
     const [isEditiedMessage, setIsEditiedMessage] = useState(false) //need to type in the bottom of message after message was edited
 
     const regYoutube = /http(?:s?):\/\/(?:www\.)?youtu(?:be\.com\/watch\?v=|\.be\/)([\w\-\_]*)(&(amp;)?‌​[\w\?‌​=]*)?/; //for youtube video
-    const messages = startMessages.concat(newMessages)  
 
     const [play] = useSound(notifSound);
 
-
     useEffect(() => {
         if (!isEditing) {
             scrollToBottom((endMessages)) 
-        } 
-      }, [newMessages]);
+        }
+      }, [startMessages]);
            
-    // useEffect(()=> {
-    //     if(newMessages.length > 0 && newMessages[newMessages.length-1].userName !== user.userName){
-    //        // play()                 
-    //     }
-    // }, [newMessages])
 
     return (             
             <Box className='messageBox'>  
                 {
-                messages.map((item, i) =>
+                startMessages.map((item, i) =>
                     <div key={i + 1} className={ 
                         (item.fromUser === user._id)? 'message myMessage' :'message'}
                         onClick = {(e) => {
@@ -155,4 +142,6 @@ socket.on("private message", (message, from)=> {
 
             </Box>
     )
+
+    
 } 

+ 5 - 0
frontend/src/components/chatPage/userInfo/UserInfo.jsx

@@ -52,6 +52,11 @@ export const UserInfo = () => {
         setDisplayType('none')
     }
 
+if(socket){
+    socket.on('my chats', (data)=> console.log(data))
+}
+    
+
     return (
             <>  
                 <h4 style={{color:'white'}}> Hello, {user.userName} </h4>