UserInfo.jsx 3.3 KB

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