UserInfoButton.jsx 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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 { useEffect,useState } from "react";
  7. import {selectedUser} from "../../../reducers/dataReducers";
  8. import {isNewPrivateMessages} from "../../../reducers/dataReducers";
  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 newPrivateMessagesArray = useSelector(state => state.getUserSocketReducer.newPrivateMessagesArray)
  20. const isNewPrivate = useSelector(state => state.dataReducer.isNewPrivateMessages)
  21. const [counter, setCounter] = useState(newPrivateMessagesArray.length)
  22. useEffect(() => {
  23. store.dispatch(isNewPrivateMessages(true))
  24. console.log('true')
  25. } , [newPrivateMessagesArray]);
  26. return (
  27. <div
  28. className={(item.socketId&&isPrivatChat&&(chatId === item.socketId))? 'online active' :'online' }
  29. onClick={(e) => {
  30. store.dispatch(selectedUser(item))
  31. store.dispatch(privateMessage({toUser: item}))
  32. store.dispatch(isNewPrivateMessages(false))
  33. setCounter(0)
  34. socket.emit('privat chat', {
  35. user,
  36. to: item.socketId,
  37. toUser: item
  38. })
  39. }
  40. }
  41. >
  42. <div style={{color: item.color}}>
  43. <StyledAvatar key={i} sx={{ marginRight:2}}
  44. anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}
  45. variant = {userNamesOnlineSet.has(item.userName)? 'dot' : ''}
  46. >
  47. <Avatar
  48. src= {SERVER_URL + '/'+ item?.avatar}
  49. sx={{ alignSelf: 'flex-end'}}
  50. >
  51. {item?.userName.slice(0, 1)}
  52. </Avatar>
  53. </StyledAvatar>
  54. <span> {item.userName} </span>
  55. {isNewPrivate && newPrivateMessagesArray.length > 0 && <span style={{color:'red',position: 'fixed' }} > {counter} </span>}
  56. </div>
  57. </div>
  58. )
  59. }