Browse Source

fix private messages need to fix sort and messages for myself

serg1557733 1 year ago
parent
commit
0fdf6c590b

+ 29 - 11
backend/app.js

@@ -369,6 +369,17 @@ socket.emit('my chats', privateChats)
                 // }
            });
 
+
+        socket.on('privat chat', async (data) => {
+            //find user to in Db
+            const privateMessagesToUser = await PrivateMessage.find({toUser: {$in:[data.user._id, data.toUser._id]}, fromUser: {$in:[data.user._id, data.toUser._id]}}).sort({ 'createDate': 1 })
+          
+            //find user from in db
+            //compare users and if messages is - send 
+            socket.emit('send privat messages', privateMessagesToUser)
+            
+          })
+
         socket.on("private message", async ({ fromUser, from, message, toUser , to}) => {
 //create message and save to DB            
             const privateMessage = new PrivateMessage({
@@ -379,8 +390,23 @@ socket.emit('my chats', privateChats)
             });
             await privateMessage.save()
           //emit event 
-            socket.to(to).emit("private message", privateMessage);
-            
+          
+        
+          const privateMessagesToUser = await PrivateMessage.find({toUser: {$in:[fromUser._id, toUser._id]}, fromUser: {$in:[fromUser._id,toUser._id]}}).sort({ 'createDate': 1 })
+
+            socket.to(to).emit("private", privateMessagesToUser);
+
+
+
+// fix time start and messages after private 
+
+
+
+
+
+
+            //add send messages to myself   socket.emit('send privat messages', privateMessagesToUser)     
+
             // //send new messages array to user
 
             // const privateMessagesToUser = await PrivateMessage.find({toUser: {$in:[fromUser._id, toUser._id]}, fromUser: {$in:[fromUser._id, toUser._id]}}).sort({ 'createDate': 1 })
@@ -390,15 +416,7 @@ socket.emit('my chats', privateChats)
           });
 
 
-          socket.on('privat chat', async (data) => {
-            //find user to in Db
-            const privateMessagesToUser = await PrivateMessage.find({toUser: {$in:[data.user._id, data.toUser._id]}, fromUser: {$in:[data.user._id, data.toUser._id]}}).sort({ 'createDate': 1 })
-          
-            //find user from in db
-            //compare users and if messages is - send 
-            socket.emit('send privat messages', privateMessagesToUser)
-            
-          })
+    
 
     
 

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

@@ -9,6 +9,7 @@ import { MessageEditorMenu } from '../MessageEditorMenu.jsx';
 import imgBtn from '../../../assets/img/gg.png';
 import useSound from 'use-sound';
 import { PrivatChatHeader } from './PrivatChatHeader';
+import { privateMessage } from '../../../reducers/userDataReducer';
 import notifSound from '../../../assets/get.mp3'
 import { UserInfoButton } from '../generalChat/UserInfoButton';
 
@@ -24,8 +25,11 @@ export const PrivateChat = () => {
     const user = useSelector(state => state.getUserSocketReducer.socketUserData)
     const storeMessageId = useSelector(state => state.messageReducer.messageId)
     const selectedUser = useSelector(state => state.dataReducer.selectedUser)
+    const newPrivateMessages = useSelector(state => state.getUserSocketReducer.newPrivateMessages)
+
 
     const [startMessages, setStartMessages] = useState([])   
+
     let endMessages = useRef(null);
 
 socket.on('send privat messages', (messages)=> {
@@ -33,10 +37,7 @@ socket.on('send privat messages', (messages)=> {
   });
 
   ///need to test not working
-socket.on("private message", (message)=> {
-    startMessages.push(message)
-  });  
-  
+const allMessages = startMessages.concat(newPrivateMessages)
 
     const [isEditing, setIsEditing] = useState(false)   
     const [isEditiedMessage, setIsEditiedMessage] = useState(false) //need to type in the bottom of message after message was edited
@@ -47,9 +48,11 @@ socket.on("private message", (message)=> {
 
     useEffect(() => {
         if (!isEditing) {
+            
             scrollToBottom((endMessages)) 
         }
-      }, [startMessages]);
+      }, [startMessages,allMessages]);
+
            
     return (  
 
@@ -59,7 +62,7 @@ socket.on("private message", (message)=> {
                 <Box className='messageBox'>  
                 
                     {
-                    startMessages.map((item, i) =>
+                    allMessages.map((item, i) =>
                     
                         <div key={i + 1} className={ 
                             (item.fromUser === user._id)? 'message myMessage' :'message'}
@@ -139,10 +142,10 @@ socket.on("private message", (message)=> {
 
                             </div>
                             {isEditiedMessage && <i>Edited</i>}
-                            <div className={ 
+                            {/* <div className={ 
                                     (item.fromUser === user._id)? 'myDate' :'date'}>
                                     {dateFormat(item).time}
-                            </div>
+                            </div> */}
                         </div>
                     )}
 

+ 4 - 4
frontend/src/components/chatPage/userInfo/UserInfo.jsx

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

+ 18 - 0
frontend/src/reducers/messageReducer.js

@@ -21,6 +21,22 @@ export const sendMessageToSocket = (state, data) => {
             } 
     };
 
+export const sendPrivateMessageToSocket = (state, data) => {
+        if (!!state.message && state.message.length < 200) {    //remove to other file
+
+            //need to check and fix data from dispatch
+            
+        // data.socket.emit("private message", {
+        //     fromUser: data.user,
+        //     message: data.message.message,
+        //     to: data.chatId,
+        //     toUser:data.toUser
+        //   })
+    
+          // data.socket.emit('message', {...data.user, message: state.message}); 
+       } 
+};
+
 export const deleteMessageHandler = (state, data) => {
     data.socket.emit('deleteMessage', {messageId: data.messageId, token: data.socket.auth.token});  
 };
@@ -74,6 +90,7 @@ const messageReducerSlice = createSlice({
            
         },
         sendMessage: (state, action) => sendMessageToSocket(state, action.payload),
+        sendPrivateMessage:(state, action) => sendPrivateMessageToSocket(state, action.payload),
         clearMessage: (state) => {state.message = ''}
 
     },
@@ -100,6 +117,7 @@ export default messageReducer;
 export const {
     storeMessage, 
     sendMessage,
+    sendPrivateMessage,
     clearMessage,
     editMessage,
     deleteMessage

+ 8 - 1
frontend/src/reducers/socketReducer.js

@@ -2,6 +2,7 @@ import {createSlice } from '@reduxjs/toolkit';
 import {io} from 'socket.io-client';
 import { store } from '../store';
 import { removeToken } from './userDataReducer';
+import { privateMessage } from './userDataReducer';
 
 
 const initialState = {
@@ -13,7 +14,8 @@ const initialState = {
     allUsers: [],
     writing: false,
     usersWriting: [],
-    newMessages : []
+    newMessages : [],
+    newPrivateMessages: []
 }
 
 const SOCKET_URL = process.env.REACT_APP_SERVER_URL;
@@ -46,6 +48,9 @@ const connectToSocket = (event) => {
                             .on('newmessage', (data) => {
                                 store.dispatch(addNewMessage(data))
                                 })
+                            .on('private', (data) => {
+                               store.dispatch(addNewPrivateMessage(data))
+                                   })
                             .on('ban', (data) => {
                                 store.dispatch(removeToken()); 
                                 localStorage.removeItem('token');
@@ -93,6 +98,7 @@ export const getUserSocketSlice = createSlice({
         getUsersOnline: (state, action) => {state.usersOnline = action.payload},
         getAllUsers: (state, action) => {state.allUsers = action.payload},
         addNewMessage: (state, action) => {state.newMessages.push(action.payload)}, 
+        addNewPrivateMessage: (state, action) => {state.newPrivateMessages = action.payload}, 
         }
     }
 );
@@ -109,6 +115,7 @@ export const {
     getAllMessages,
     getUsersOnline,
     addNewMessage,
+    addNewPrivateMessage,
     getAllUsers,
     writing
     } = actions;