UserInfoButton.jsx 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  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 {isNewPrivateMessages} from "../../../reducers/dataReducers";
  9. import { AddToFriends } from "./AddToFriends";
  10. export const UserInfoButton = ({item, i}) => {
  11. const SERVER_URL = process.env.REACT_APP_SERVER_URL
  12. const user = useSelector(state => state.getUserSocketReducer.socketUserData)
  13. const socket = useSelector(state => state.getUserSocketReducer.socket)
  14. const isPrivatChat = useSelector(state => state.userDataReducer.isPrivatChat)
  15. const chatId = useSelector(state => state.userDataReducer.toUser.socketId)
  16. const storeUserAvatar = useSelector(state => state.userDataReducer.avatar)
  17. const usersOnline = useSelector(state => state.getUserSocketReducer.usersOnline)
  18. const userNamesOnlineSet = new Set(usersOnline.map( i => i.userName))
  19. let userAvatarUrl = storeUserAvatar || user.avatar;
  20. const newPrivateMessagesArray = useSelector(state => state.getUserSocketReducer.newPrivateMessagesArray)
  21. const isNewPrivate = useSelector(state => state.dataReducer.isNewPrivateMessages)
  22. const [counter, setCounter] = useState(newPrivateMessagesArray.length)
  23. useEffect(() => {
  24. store.dispatch(isNewPrivateMessages(true))
  25. console.log('true')
  26. } , [newPrivateMessagesArray]);
  27. const newPrivateMessages = useSelector(state => state.getUserSocketReducer.newPrivateMessages)
  28. const [isPrivate, setIsPrivate] = useState(false)
  29. // console.log('usersinfobutton Item',item)
  30. const privateChatHandler = (item) => {
  31. socket.emit('privat chat', {
  32. user,
  33. to: item.socketId,
  34. toUser: item
  35. })
  36. }
  37. useEffect(() => {
  38. if(newPrivateMessages.text && newPrivateMessages?.sender[0].userName === item.userName){
  39. setIsPrivate(!!newPrivateMessages.text)
  40. }
  41. },[newPrivateMessages])
  42. return (
  43. <div
  44. className={(item.socketId&&isPrivatChat&&(chatId === item.socketId))? 'online active' :'online' }
  45. onClick={(e) => {
  46. store.dispatch(selectedUser(item))
  47. store.dispatch(privateMessage({toUser: item}))
  48. store.dispatch(isNewPrivateMessages(false))
  49. setCounter(0)
  50. setIsPrivate(false)
  51. socket.emit('privat chat', {
  52. user,
  53. to: item.socketId,
  54. toUser: item
  55. })
  56. }
  57. }
  58. >
  59. {isPrivate && item.userName && <span style={{color:'red'}} > new </span>}
  60. <div style={{color: item.color}}>
  61. <StyledAvatar key={i} sx={{ marginRight:2}}
  62. anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}
  63. variant = {userNamesOnlineSet.has(item.userName)? 'dot' : ''}
  64. >
  65. <Avatar
  66. src= {SERVER_URL + '/'+ item?.avatar}
  67. sx={{ alignSelf: 'flex-end'}}
  68. >
  69. {item?.userName.slice(0, 1)}
  70. </Avatar>
  71. </StyledAvatar>
  72. <span> {item.userName} </span>
  73. {isNewPrivate && newPrivateMessagesArray.length > 0 && <span style={{color:'red',position: 'fixed' }} > {counter} </span>}
  74. </div>
  75. <AddToFriends user = {item}/>
  76. </div>
  77. )
  78. }