UserInfo.jsx 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  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 PC_AVATAR_STYLE = {
  15. bgcolor: 'grey',
  16. width: '100px',
  17. height: '100px',
  18. fontSize: 14,
  19. margin: '20px auto',
  20. cursor: 'pointer'
  21. };
  22. const MOBILE_AVATAR_STYLE = { margin: '5px auto'};
  23. const [displayType, setDisplayType] = useState('none');
  24. const dispatch = useDispatch();
  25. const loadAvatarHandler = () => {
  26. setDisplayType('block')
  27. setTimeout(() => {
  28. setDisplayType('none')
  29. }, 4000)
  30. }
  31. const SERVER_URL = process.env.REACT_APP_SERVER_URL
  32. const allUsers = useSelector(state => state.getUserSocketReducer.allUsers)
  33. const user = useSelector(state => state.getUserSocketReducer.socketUserData)
  34. const usersOnline = useSelector(state => state.getUserSocketReducer.usersOnline);
  35. const socket = useSelector(state => state.getUserSocketReducer.socket)
  36. const isTabletorMobile = (window.screen.width < 730);
  37. const storeUserAvatar = useSelector(state => state.userDataReducer.avatar)
  38. const chatId = useSelector(state => state.userDataReducer.chatId)
  39. const newPrivateMessages = useSelector(state => state.getUserSocketReducer.newPrivateMessages)
  40. let userAvatarUrl = storeUserAvatar || user.avatar;
  41. const inputHandler = (e) => {
  42. const file = e.target.files[0]
  43. dispatch(getUserAvatar(file))
  44. setDisplayType('none')
  45. }
  46. console.log('render userinfo component')
  47. // if(socket){
  48. // socket.on('my chats', (data)=> console.log('my chats', data))
  49. // }
  50. return (
  51. <>
  52. <h4 style={{color:'white'}}> Hello, {user.userName} </h4>
  53. <Avatar
  54. sx={isTabletorMobile ? MOBILE_AVATAR_STYLE : PC_AVATAR_STYLE} //add deleting function after update avatar
  55. onClick={() => loadAvatarHandler()}
  56. src={userAvatarUrl ? SERVER_URL +'/'+ userAvatarUrl : ""}
  57. >
  58. </Avatar>
  59. <input
  60. type="file"
  61. accept="image/png, image/jpeg"
  62. name='file'
  63. style = {{
  64. display: displayType
  65. }}
  66. onChange = {e => inputHandler(e)}/>
  67. <MainChatButtton/>
  68. <FindUserBox/>
  69. { user.isAdmin && !isTabletorMobile ?
  70. allUsers.map((item, i) =>
  71. (user.userName !== item?.userName)
  72. && <AdminUserInfiButton item={item} i={i} key={i}/>)
  73. :
  74. !isTabletorMobile
  75. && usersOnline.map((item, i) =>
  76. (user.userName !== item.userName) && <UserInfoButton item = {item} i = {i} key={i} />
  77. )
  78. }
  79. </>
  80. )
  81. }