MessegaForm.jsx 4.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  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. export const MessageForm = () => {
  9. const randomColor = require('randomcolor');
  10. const startMessages = useSelector(state => state.getUserSocketReducer.startMessages)
  11. const user = useSelector(state => state.getUserSocketReducer.socketUserData)
  12. const usersOnline = useSelector(state => state.getUserSocketReducer.usersOnline)
  13. const userColor = useMemo(() => randomColor(),[]);
  14. const dispatch = useDispatch();
  15. const endMessages = useRef(null);
  16. useEffect(() => {
  17. scrollToBottom(endMessages)
  18. }, [startMessages]);
  19. return (
  20. <Box className='messageBox'>
  21. {
  22. startMessages.map((item, i) =>
  23. <Fragment key={i} >
  24. <Avatar
  25. sx={
  26. (item.userName == user.userName)
  27. ?
  28. {
  29. alignSelf: 'flex-end',
  30. fontSize: 10,
  31. width: '60px',
  32. height: '60px',
  33. color:'black',
  34. backgroundColor: userColor
  35. }
  36. :
  37. {
  38. backgroundColor: (usersOnline.map(current => {
  39. if(item.userName === current.userName ) {
  40. return current.color
  41. }
  42. } )),
  43. fontSize: 10,
  44. width: '60px',
  45. height: '60px',
  46. color:'black'
  47. }
  48. }>
  49. {item.userName}
  50. </Avatar>
  51. <div
  52. key={item._id}
  53. onClick = {(e) => {
  54. if(e.target.className.includes('myMessage')){
  55. e.currentTarget.className += ' editMessage'
  56. startMessages.map( item => {
  57. if((item.userName === user.userName) && (item.text === e.target.textContent)){
  58. console.log('edit message',e.target.textContent )
  59. dispatch(editMessage({editMessage: e.target.textContent}))
  60. }
  61. })
  62. }
  63. }}
  64. className={
  65. (item.userName === user.userName)? 'message myMessage' :'message'}
  66. >
  67. <p>{item.text}</p>
  68. </div>
  69. <div className={
  70. (item.userName === user.userName)? 'myData' :'date'}>
  71. <div className='time'>
  72. {dateFormat(item).time}
  73. </div>
  74. <div className='date'>
  75. {dateFormat(item).year}
  76. </div>
  77. </div>
  78. </Fragment>
  79. )}
  80. <div ref={endMessages}></div>
  81. </Box>
  82. )
  83. }