Browse Source

add friends functions to front

serg1557733 1 year ago
parent
commit
0af40e8d69

+ 3 - 1
backend/app.js

@@ -269,7 +269,7 @@ io.on("connection", async (socket) => {
 // }
 
     io.emit('usersOnline', usersInSocket); // send array online users  
-
+    dbUser.populate({path:'friends'}).then(res => socket.emit('friends',res.friends)) 
     //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
@@ -424,6 +424,8 @@ socket.emit('my chats', privateChats)
             await User.findOne({userName}).populate({path:'friends'}).then(res => socket.emit('friends',res.friends) )
             
         }) 
+
+        //need to fix - removed all users from frend only clicked not removed
           
         socket.on('removeFromFriends', async(user) => {
             const res = await User.updateOne({ userName}, {

+ 8 - 3
frontend/src/components/chatPage/generalChat/AddToFriends.jsx

@@ -8,9 +8,14 @@ export const AddToFriends = (user) => {
 
     const isTabletorMobile = (window.screen.width < 730);
 
-    const [isFriend, setIsFreind] = useState(false)
+    const usersFriends = useSelector(state => state.getUserSocketReducer.socketUserData).friends
+
+    let isMyFriend = false;
+    if(usersFriends) {
+        isMyFriend = usersFriends.find(friend => friend._id === user.user._id)
+    }
 
-    socket.on('friends', data =>  console.log(data))
+    const [isFriend, setIsFreind] = useState(false)
    
     return (
         <div onClick={() => {
@@ -18,7 +23,7 @@ export const AddToFriends = (user) => {
                             isFriend ? socket.emit('removeFromFriends', user) : socket.emit('addToFriends', user)       
             }} >
             <div className= {isTabletorMobile ?'mobileButton addToFriendsButton': "addToFriendsButton" } 
-               style ={{backgroundColor:(isFriend ? 'red': '#1976d3' )}}
+               style ={{backgroundColor:(isFriend || isMyFriend? 'red': '#1976d3' )}}
             >
                 
             </div>

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

@@ -36,6 +36,7 @@ export const UserInfo = () => {
     const chatId = useSelector(state => state.userDataReducer.chatId)
     const showUserInfoBox = useSelector(state => state.userDataReducer.showUserInfoBox)
     const newPrivateMessages = useSelector(state => state.getUserSocketReducer.newPrivateMessages)
+    const friends = useSelector(state => state.getUserSocketReducer.friends)
 
 
     let userAvatarUrl = storeUserAvatar || user.avatar;
@@ -77,6 +78,10 @@ console.log(user)
                         }}
                     onChange = {e => inputHandler(e)}/>
 
+
+                 
+                {friends.map((item, i) =>(user.userName !== item.userName) && <UserInfoButton item = {item} i = {i}  key={i} /> )}
+                    
                    
                 <MainChatButtton/>     
 

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

@@ -16,7 +16,11 @@ const initialState = {
     usersWriting: [],
     newMessages : [],
     newPrivateMessages: {},
+<<<<<<< HEAD
     newPrivateMessagesArray: []
+=======
+    friends: []
+>>>>>>> new-branch
 }
 
 const SOCKET_URL = process.env.REACT_APP_SERVER_URL;
@@ -60,7 +64,7 @@ const connectToSocket = (event) => {
                                     store.dispatch(getUsersOnline(data))
                                 })
                             .on('friends', data => {
-                                    console.log('friends from server', data)
+                                    store.dispatch(friendsFromSocket(data))
                                 })
                             .on('disconnect', (data) => {
                                 if( data === 'io server disconnect') {
@@ -102,10 +106,15 @@ 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)}, 
+<<<<<<< HEAD
         addNewPrivateMessage: (state, action) => {
             state.newPrivateMessages = action.payload
             state.newPrivateMessagesArray.push(action.payload)
         }, 
+=======
+        addNewPrivateMessage: (state, action) => {state.newPrivateMessages = action.payload}, 
+        friendsFromSocket:(state, action) => {state.friends = action.payload}
+>>>>>>> new-branch
         }
     }
 );
@@ -124,5 +133,6 @@ export const {
     addNewMessage,
     addNewPrivateMessage,
     getAllUsers,
+    friendsFromSocket,
     writing
     } = actions;