ChatPage.jsx 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. import { useEffect, useState} from 'react';
  2. import {Button, Box} from '@mui/material';
  3. import TextareaAutosize from '@mui/material/TextareaAutosize';
  4. import { MessageForm } from './messageForm/MessegaForm';
  5. import { UserInfo } from './userInfo/UserInfo';
  6. import { store } from '../../store';
  7. import { removeToken} from '../../reducers/userDataReducer'
  8. import { useDispatch, useSelector } from 'react-redux';
  9. import {getSocket} from'../../reducers/socketReducer';
  10. import { sendMessage, storeMessage } from '../../reducers/messageReducer';
  11. import { editMessage } from '../../reducers/messageReducer';
  12. import { SwitchButton } from './SwitchButton';
  13. import './chatPage.scss';
  14. export const ChatPage = () => {
  15. const SOCKET_EVENTS = process.env.REACT_APP_SERVER_URL || ['allmessages', 'usersOnline', 'allDbUsers']
  16. const dispatch = useDispatch();
  17. const token = useSelector(state => localStorage.getItem('token') || state.userDataReducer.token);
  18. const user = useSelector(state => state.getUserSocketReducer.socketUserData)
  19. const socket = useSelector(state => state.getUserSocketReducer.socket)
  20. const editOldMessage = useSelector(state => state.messageReducer.editMessage)
  21. let showUserInfoBox = useSelector(state => state.messageReducer.showUserInfoBox)// || localStorage.getItem('showBox');
  22. const [message, setMessage] = useState({message: ''});
  23. const isTabletorMobile = (window.screen.width < 730);
  24. useEffect(() => {
  25. if(token){
  26. SOCKET_EVENTS.map(event => dispatch(getSocket(event)))
  27. }
  28. }, [token, editOldMessage, showUserInfoBox])
  29. return (
  30. <div className='rootContainer'>
  31. <Box className = 'rootBox'>
  32. { isTabletorMobile ? <SwitchButton/> : null}
  33. <Box className ={isTabletorMobile ? 'rootMessageFormMobile':'rootMessageForm'} >
  34. <MessageForm/>
  35. <Box
  36. component="form"
  37. onSubmit = {e => {
  38. e.preventDefault()
  39. dispatch(sendMessage({user, socket}))
  40. dispatch(getSocket('allmessages'))
  41. dispatch(editMessage({editMessage: ''}))
  42. setMessage({message: ''})
  43. }}
  44. sx={(isTabletorMobile)?{
  45. display: 'flex',
  46. margin: '10px 2px'}
  47. :{
  48. display: 'flex',
  49. margin: '20px 5px'}
  50. }>
  51. <TextareaAutosize
  52. id="outlined-basic"
  53. label="Type a message..."
  54. variant="outlined"
  55. value={message.message || editOldMessage}
  56. placeholder='type you message...'
  57. minRows={3}
  58. maxRows={4}
  59. className='textArea'
  60. onKeyPress={(e) => {
  61. if (e.key === "Enter") {
  62. e.preventDefault();
  63. dispatch(sendMessage({user, socket}))
  64. dispatch(getSocket('allmessages'))
  65. dispatch(editMessage({editMessage: ''}))
  66. setMessage({message: ''})
  67. }
  68. }}
  69. onChange={e => {
  70. dispatch(storeMessage({message: e.target.value}))
  71. setMessage({message: e.target.value})}
  72. }
  73. />
  74. <Button
  75. variant="contained"
  76. type='submit'
  77. disabled={user?.isMutted}
  78. style={{width: '20%'}}
  79. >
  80. Send
  81. </Button>
  82. </Box>
  83. </Box>
  84. <Box className={isTabletorMobile?'usersBoxMobile':'usersBox'}
  85. sx = {showUserInfoBox ? {
  86. transform: "translateX(100%)",
  87. display: "none"
  88. }: {}}>
  89. <Button
  90. sx={isTabletorMobile ?
  91. {
  92. maxHeight:'25px',
  93. maxWidth: '20px'}
  94. :{margin:'10px 5px'}}
  95. variant="outlined"
  96. onClick={()=> {
  97. localStorage.removeItem('token');
  98. socket.disconnect();
  99. dispatch(removeToken());
  100. }}>
  101. Logout
  102. </Button>
  103. <UserInfo/>
  104. </Box>
  105. </Box>
  106. </div>
  107. )
  108. }