ChatPage.jsx 4.8 KB

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