UserInfoButton.jsx 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import { store } from "../../../store";
  2. import { privateMessage } from "../../../reducers/userDataReducer";
  3. import { useSelector } from "react-redux";
  4. import { StyledAvatar } from "../messageForm/StyledAvatar";
  5. import { Avatar } from "@mui/material";
  6. import { useState, useEffect } from "react";
  7. import {selectedUser} from "../../../reducers/dataReducers";
  8. import { AddToFriends } from "./AddToFriends";
  9. export const UserInfoButton = ({item, i}) => {
  10. const SERVER_URL = process.env.REACT_APP_SERVER_URL
  11. const user = useSelector(state => state.getUserSocketReducer.socketUserData)
  12. const socket = useSelector(state => state.getUserSocketReducer.socket)
  13. const isPrivatChat = useSelector(state => state.userDataReducer.isPrivatChat)
  14. const chatId = useSelector(state => state.userDataReducer.toUser.socketId)
  15. const storeUserAvatar = useSelector(state => state.userDataReducer.avatar)
  16. const usersOnline = useSelector(state => state.getUserSocketReducer.usersOnline)
  17. const userNamesOnlineSet = new Set(usersOnline.map( i => i.userName))
  18. let userAvatarUrl = storeUserAvatar || user.avatar;
  19. const newPrivateMessages = useSelector(state => state.getUserSocketReducer.newPrivateMessages)
  20. const [isPrivate, setIsPrivate] = useState(false)
  21. // console.log('usersinfobutton Item',item)
  22. useEffect(() => {
  23. if(newPrivateMessages.text && newPrivateMessages?.sender[0].userName === item.userName){
  24. setIsPrivate(!!newPrivateMessages.text)
  25. }
  26. },[newPrivateMessages])
  27. return (
  28. <div
  29. className={(item.socketId&&isPrivatChat&&(chatId === item.socketId))? 'online active' :'online' }
  30. onClick={(e) => {
  31. store.dispatch(selectedUser(item))
  32. store.dispatch(privateMessage({toUser: item}))
  33. setIsPrivate(false)
  34. console.log('item', item)
  35. socket.emit('privat chat', {
  36. user,
  37. to: item.socketId,
  38. toUser: item
  39. })
  40. }
  41. }
  42. >
  43. {isPrivate && item.userName && <span style={{color:'red'}} > new </span>}
  44. <div style={{color: item.color}}>
  45. <StyledAvatar key={i} sx={{ marginRight:2}}
  46. anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}
  47. variant = {userNamesOnlineSet.has(item.userName)? 'dot' : ''}
  48. >
  49. <Avatar
  50. src= {SERVER_URL + '/'+ item?.avatar}
  51. sx={{ alignSelf: 'flex-end'}}
  52. >
  53. {item?.userName.slice(0, 1)}
  54. </Avatar>
  55. </StyledAvatar>
  56. {item.userName}
  57. </div>
  58. <AddToFriends user = {item}/>
  59. </div>
  60. )
  61. }