MessegaForm.jsx 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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 startMessages = useSelector(state => state.getUserSocketReducer.startMessages)
  13. const user = useSelector(state => state.getUserSocketReducer.socketUserData)
  14. const usersOnline = useSelector(state => state.getUserSocketReducer.usersOnline)
  15. const userColor = useMemo(() => randomColor(),[]);
  16. const avatarImg = '';
  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. <Avatar
  28. src= {avatarImg || ''}
  29. sx={
  30. (item.userName == user.userName)
  31. ?
  32. {
  33. alignSelf: 'flex-end',
  34. backgroundColor: userColor
  35. }
  36. :
  37. {
  38. backgroundColor: (usersOnline.map(current => {
  39. if(item.userName === current.userName ) {
  40. return current.color
  41. }
  42. } )),
  43. }
  44. }>
  45. {item.userName.slice(0, 1)}
  46. </Avatar>
  47. <div
  48. key={item._id}
  49. onClick = {(e) => {
  50. if(e.target.className.includes('myMessage')){
  51. e.currentTarget.className += ' editMessage'
  52. startMessages.map( item => {
  53. if((item.userName === user.userName) && (item.text === e.target.textContent)){
  54. console.log('edit message',e.target.textContent )
  55. dispatch(editMessage({editMessage: e.target.textContent}))
  56. }
  57. })}
  58. }}
  59. className={
  60. (item.userName === user.userName)? 'message myMessage' :'message'}>
  61. <p>{item.text}</p>
  62. </div>
  63. <div className={
  64. (item.userName === user.userName)? 'myDate' :'date'}>
  65. {dateFormat(item).time}
  66. </div>
  67. </div>
  68. )}
  69. <div ref={endMessages}></div>
  70. </Box>
  71. )
  72. }