UserInfoButton.jsx 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  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 } from "react";
  7. import { useDispatch } from 'react-redux';
  8. import {selectedUser} 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. return (
  20. <div
  21. className={(item.socketId&&isPrivatChat&&(chatId === item.socketId))? 'online active' :'online' }
  22. onClick={(e) => {
  23. store.dispatch(selectedUser(item))
  24. store.dispatch(privateMessage({toUser: item}))
  25. socket.emit('privat chat', {
  26. user,
  27. to: item.socketId,
  28. toUser: item
  29. })
  30. }
  31. }
  32. >
  33. <div style={{color: item.color}}>
  34. <StyledAvatar key={i} sx={{ marginRight:2}}
  35. anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}
  36. variant = {userNamesOnlineSet.has(item.userName)? 'dot' : ''}
  37. >
  38. <Avatar
  39. src= {SERVER_URL + '/'+ item?.avatar}
  40. sx={{ alignSelf: 'flex-end'}}
  41. >
  42. {item?.userName.slice(0, 1)}
  43. </Avatar>
  44. </StyledAvatar>
  45. {item.userName}
  46. </div>
  47. </div>
  48. )
  49. }