MessegaForm.jsx 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. import {Avatar, Box} from '@mui/material';
  2. import { dateFormat } from '../utils/dateFormat';
  3. import { useSelector } from 'react-redux';
  4. import { Fragment, useRef, useEffect, useMemo} from 'react';
  5. import { scrollToBottom } from '../utils/scrollToBottom';
  6. import { useDispatch } from 'react-redux';
  7. import { editMessage } from '../../../reducers/messageReducer';
  8. import { TimeAgoMessage } from '../TimeAgoMessage';
  9. export const MessageForm = () => {
  10. const randomColor = require('randomcolor');
  11. const dispatch = useDispatch();
  12. const SERVER_URL = process.env.REACT_APP_SERVER_URL|| 'http://localhost:5000/';
  13. const startMessages = useSelector(state => state.getUserSocketReducer.startMessages)
  14. const user = useSelector(state => state.getUserSocketReducer.socketUserData)
  15. const usersOnline = useSelector(state => state.getUserSocketReducer.usersOnline)
  16. const userColor = useMemo(() => randomColor(),[]);
  17. const endMessages = useRef(null);
  18. useEffect(() => {
  19. scrollToBottom(endMessages)
  20. }, [startMessages, usersOnline]);
  21. return (
  22. <Box className='messageBox'>
  23. {
  24. startMessages.map((item, i) =>
  25. <div key={i} className={
  26. (item.userName === user.userName)? 'message myMessage' :'message'}>
  27. {console.log(item)}
  28. <Avatar
  29. // src= {SERVER_URL + item.userAvatar}
  30. sx={
  31. (item.userName == user.userName)
  32. ?
  33. {
  34. alignSelf: 'flex-end',
  35. backgroundColor: userColor
  36. }
  37. :
  38. {
  39. backgroundColor: (usersOnline.map(current => {
  40. if(item.userName === current.userName ) {
  41. return current.color
  42. }
  43. } )),
  44. }
  45. }>
  46. {item?.userName.slice(0, 1)}
  47. </Avatar>
  48. <div
  49. key={item._id}
  50. onClick = {(e) => {
  51. if(e.target.className.includes('myMessage')){
  52. e.currentTarget.className += ' editMessage'
  53. startMessages.map( item => {
  54. if((item.userName === user.userName) && (item.text === e.target.textContent)){
  55. console.log('edit message',e.target.textContent )
  56. dispatch(editMessage({editMessage: e.target.textContent}))
  57. }
  58. })}
  59. }}
  60. className={
  61. (item.userName === user.userName)? 'message myMessage' :'message'}>
  62. <p>{item.text}</p>
  63. </div>
  64. <div className={
  65. (item.userName === user.userName)? 'myDate' :'date'}>
  66. {dateFormat(item).time}
  67. </div>
  68. </div>
  69. )}
  70. <div ref={endMessages}></div>
  71. </Box>
  72. )
  73. }