UserInfo.jsx 5.2 KB

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