UserInfo.jsx 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. import {Button,Avatar} from '@mui/material';
  2. import { useSelector } from 'react-redux';
  3. import { banUser } from '../service/banUser';
  4. import Input from '@mui/material/Input';
  5. import { muteUser } from '../service/muteUser';
  6. import './userInfo.scss';
  7. import { useDispatch } from 'react-redux';
  8. import { getUserAvatar } from '../../../reducers/userDataReducer';
  9. export const UserInfo = () => {
  10. const PC_AVATAR_STYLE = {
  11. bgcolor: 'grey',
  12. width: '100px',
  13. height: '100px',
  14. fontSize: 14,
  15. margin: '20px auto',
  16. cursor: 'pointer'
  17. };
  18. const MOBILE_AVATAR_STYLE = { margin: '5px auto'};
  19. const dispatch = useDispatch();
  20. //add foto loading function
  21. let displayType = 'block';
  22. const loadAvatarHandler = () => {
  23. // dispatch(getUserAvatar());
  24. }
  25. const allUsers = useSelector(state => state.getUserSocketReducer.allUsers)
  26. const user = useSelector(state => state.getUserSocketReducer.socketUserData)
  27. const usersOnline = [...new Set(useSelector(state => state.getUserSocketReducer.usersOnline))];//Set?
  28. const socket = useSelector(state => state.getUserSocketReducer.socket)
  29. const isTabletorMobile = (window.screen.width < 730);
  30. const inputHandler = (e) => {
  31. const file = e.target.files[0]
  32. console.log(file)
  33. dispatch(getUserAvatar(file))
  34. }
  35. return (
  36. <>
  37. <Input
  38. type="file"
  39. accept="image/png, image/jpeg"
  40. style = {{display: displayType}}
  41. onChange = {e => inputHandler(e)}
  42. />
  43. <Avatar
  44. sx={ isTabletorMobile ? MOBILE_AVATAR_STYLE : PC_AVATAR_STYLE}
  45. onClick={() => loadAvatarHandler()} />
  46. {user.isAdmin ?
  47. allUsers.map((item) =>
  48. <div
  49. key={item._id}
  50. className='online'>
  51. <div style={{color: (usersOnline.map(current => {
  52. if(item.userName === current.userName) {
  53. return current.color
  54. }}))
  55. }}>
  56. {item.userName}
  57. </div>
  58. <div>
  59. {(user.userName === item.userName )?
  60. "admin"
  61. :
  62. <>
  63. <Button
  64. variant="contained"
  65. onClick={()=>{
  66. muteUser(item.userName, item?.isMutted, socket)
  67. }}
  68. sx={(isTabletorMobile)
  69. ?
  70. {height: '15px',
  71. maxWidth:'20px'}:
  72. {
  73. margin:'3px',
  74. height: '25px'}}>
  75. {item.isMutted
  76. ?
  77. 'unmute'
  78. : 'mute'}
  79. </Button>
  80. <Button
  81. variant="contained"
  82. onClick={()=>{
  83. banUser(item.userName, item.isBanned, socket)
  84. }}
  85. sx={(isTabletorMobile)
  86. ?
  87. {height: '15px',
  88. margin:'2px'} :
  89. {
  90. margin:'3px',
  91. height: '25px'}}
  92. >
  93. {item?.isBanned ? 'unban' : 'ban'}
  94. </Button>
  95. </>}
  96. </div>
  97. {usersOnline.map((user, i) => {
  98. if(item.userName === user.userName){
  99. return <span key={i} style={{color: 'green'}}>online</span>
  100. }})}
  101. </div>)
  102. :
  103. usersOnline.map((item, i) =>
  104. <div
  105. key={i}
  106. className='online'>
  107. <div style={{color: item.color}}>
  108. {item.userName}
  109. </div>
  110. <span style={{color: 'green'}}>
  111. online
  112. </span>
  113. </div>)
  114. }
  115. </>
  116. )
  117. }