UserInfo.jsx 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. import {Avatar} from '@mui/material';
  2. import { StyledAvatar } from '../messageForm/StyledAvatar';
  3. import { useSelector } from 'react-redux';
  4. import './userInfo.scss';
  5. import { useDispatch } from 'react-redux';
  6. import { getUserAvatar } from '../../../reducers/userDataReducer';
  7. import { useState, useCallback } from 'react';
  8. import { UserInfoButton } from '../generalChat/UserInfoButton';
  9. import { AdminUserInfiButton } from '../generalChat/AdminUserInfiButton';
  10. import { MainChatButtton } from '../generalChat/MainChatButtton';
  11. import { FindUserBox } from '../generalChat/FindUserBox';
  12. import './userInfo.scss';
  13. export const UserInfo = () => {
  14. const [displayType, setDisplayType] = useState('none');
  15. const dispatch = useDispatch();
  16. const loadAvatarHandler = () => {
  17. setDisplayType('block')
  18. setTimeout(() => {
  19. setDisplayType('none')
  20. }, 4000)
  21. }
  22. const SERVER_URL = process.env.REACT_APP_SERVER_URL
  23. const allUsers = useSelector(state => state.getUserSocketReducer.allUsers)
  24. const user = useSelector(state => state.getUserSocketReducer.socketUserData)
  25. const usersOnline = useSelector(state => state.getUserSocketReducer.usersOnline);
  26. const socket = useSelector(state => state.getUserSocketReducer.socket)
  27. const isTabletorMobile = (window.screen.width < 730);
  28. const storeUserAvatar = useSelector(state => state.userDataReducer.avatar)
  29. const chatId = useSelector(state => state.userDataReducer.chatId)
  30. const showUserInfoBox = useSelector(state => state.userDataReducer.showUserInfoBox)
  31. const newPrivateMessages = useSelector(state => state.getUserSocketReducer.newPrivateMessages)
  32. const newMessage = useSelector(state => state.getUserSocketReducer.newMessages)
  33. const friends = useSelector(state => state.getUserSocketReducer.friends)
  34. console.log('friends', friends)
  35. const friendsIds = friends.map(friend => friend._id)
  36. let userAvatarUrl = storeUserAvatar || user.avatar;
  37. const inputHandler = (e) => {
  38. const file = e.target.files[0]
  39. dispatch(getUserAvatar(file))
  40. setDisplayType('none')
  41. }
  42. console.log(user)
  43. // if(socket){
  44. // socket.on('my chats', (data)=> console.log('my chats', data))
  45. // }
  46. console.log(usersOnline)
  47. return (
  48. <>
  49. <h4 style={{color:'white'}}> Hello, {user.userName} </h4>
  50. <Avatar
  51. className={isTabletorMobile ? 'mobileAvatar' : 'pcUsersAvatar'} //add deleting function after update avatar
  52. onClick={() => loadAvatarHandler()}
  53. src={userAvatarUrl ? SERVER_URL +'/'+ userAvatarUrl : ""}
  54. >
  55. </Avatar>
  56. <div
  57. className={isTabletorMobile ? 'mobileUsersInfoBox' : 'pcUsersInfoBox'}
  58. style={showUserInfoBox && isTabletorMobile ? {'transform':'translate(-100%)'}:{ 'transform':'translate(0)'}}
  59. >
  60. <input
  61. type="file"
  62. accept="image/png, image/jpeg"
  63. name='file'
  64. style = {{
  65. display: displayType
  66. }}
  67. onChange = {e => inputHandler(e)}/>
  68. {friends.map((item, i) =>(user.userName !== item.userName) && <UserInfoButton item = {item} i = {i} key={i} /> )}
  69. <MainChatButtton/>
  70. <FindUserBox/>
  71. { user.isAdmin && !isTabletorMobile ?
  72. allUsers.map((item, i) =>
  73. (user.userName !== item?.userName)
  74. && <AdminUserInfiButton item={item} i={i} key={i}/>)
  75. :
  76. usersOnline.map((item, i) =>
  77. (user.userName !== item.userName && !friendsIds.includes(item._id) ) && <UserInfoButton item = {item} i = {i} key={i} />
  78. )
  79. }
  80. {
  81. newPrivateMessages.length > 0
  82. && newPrivateMessages.map((item, i) =>
  83. // <UserInfoButton item = {item} i = {i} key={i} />
  84. console.log(item)
  85. )
  86. }
  87. </div>
  88. </>
  89. )
  90. }