UserInfo.jsx 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. import {Avatar} from '@mui/material';
  2. import { useSelector } from 'react-redux';
  3. import './userInfo.scss';
  4. import { useDispatch } from 'react-redux';
  5. import { getUserAvatar, privateMessage } from '../../../reducers/userDataReducer';
  6. import { useState, useEffect } from 'react';
  7. import { UserInfoButton } from '../generalChat/UserInfoButton';
  8. import { AdminUserInfiButton } from '../generalChat/AdminUserInfiButton';
  9. import { MainChatButtton } from '../generalChat/MainChatButtton';
  10. import './userInfo.scss';
  11. export const UserInfo = () => {
  12. const PC_AVATAR_STYLE = {
  13. bgcolor: 'grey',
  14. width: '100px',
  15. height: '100px',
  16. fontSize: 14,
  17. margin: '20px auto',
  18. cursor: 'pointer'
  19. };
  20. const MOBILE_AVATAR_STYLE = { margin: '5px auto'};
  21. const [displayType, setDisplayType] = useState('none');
  22. const dispatch = useDispatch();
  23. const loadAvatarHandler = () => {
  24. setDisplayType('block')
  25. setTimeout(() => {
  26. setDisplayType('none')
  27. }, 4000)
  28. }
  29. const SERVER_URL = process.env.REACT_APP_SERVER_URL
  30. const allUsers = useSelector(state => state.getUserSocketReducer.allUsers)
  31. const user = useSelector(state => state.getUserSocketReducer.socketUserData)
  32. const usersOnline = useSelector(state => state.getUserSocketReducer.usersOnline);
  33. const socket = useSelector(state => state.getUserSocketReducer.socket)
  34. const isTabletorMobile = (window.screen.width < 730);
  35. const storeUserAvatar = useSelector(state => state.userDataReducer.avatar)
  36. const chatId = useSelector(state => state.userDataReducer.chatId)
  37. let userAvatarUrl = storeUserAvatar || user.avatar;
  38. const inputHandler = (e) => {
  39. const file = e.target.files[0]
  40. dispatch(getUserAvatar(file))
  41. setDisplayType('none')
  42. }
  43. return (
  44. <>
  45. <h4 style={{color:'white'}}> Hello, {user.userName} </h4>
  46. <Avatar
  47. sx={isTabletorMobile ? MOBILE_AVATAR_STYLE : PC_AVATAR_STYLE} //add deleting function after update avatar
  48. onClick={() => loadAvatarHandler()}
  49. src={userAvatarUrl ? SERVER_URL +'/'+ userAvatarUrl : ""}
  50. >
  51. </Avatar>
  52. <input
  53. type="file"
  54. accept="image/png, image/jpeg"
  55. name='file'
  56. style = {{
  57. display: displayType
  58. }}
  59. onChange = {e => inputHandler(e)}/>
  60. <MainChatButtton/>
  61. {user.isAdmin && !isTabletorMobile ?
  62. allUsers.map((item, i) =>
  63. (user.userName !== item?.userName)
  64. && <AdminUserInfiButton item={item} i={i} key={i}/>)
  65. :
  66. !isTabletorMobile
  67. && usersOnline.map((item, i) =>
  68. (user.userName !== item.userName) && <UserInfoButton item = {item} i = {i} key={i} />
  69. )
  70. }
  71. </>
  72. )
  73. }