index.tsx 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import { makeStyles } from '@material-ui/core'
  2. import { useSelector } from 'react-redux'
  3. import React, { useState } from 'react'
  4. import MenuList from '@mui/material/MenuList';
  5. import Avatar from '@mui/material/Avatar';
  6. import MenuItem from '@mui/material/MenuItem';
  7. import ListItemText from '@mui/material/ListItemText';
  8. import Search from './Search'
  9. import AlertInfo from "../../../../../reusableComponents/AlertInfo";
  10. import { getMessages } from '../../../../../../redux/messages/selector'
  11. import { format,timeStamp,firstLetter,slicedWord } from '../../../../../../helpers'
  12. import shortid from 'shortid';
  13. const useStyles = makeStyles({
  14. containerAbsolute: {
  15. position: 'absolute',
  16. top: 58,
  17. width: 506,
  18. borderLeft: 'solid 0.5px #9c9c9c',
  19. maxHeight: '905px',
  20. minHeight: '905px',
  21. overflowY: 'scroll',
  22. overflowX: 'hidden',
  23. backgroundColor: '#ffffff'
  24. },
  25. listItem: {
  26. marginBottom: 5,
  27. paddingBottom: 5,
  28. borderBottom: 'solid 1px #ececec',
  29. },
  30. message: {
  31. width: '100%',
  32. wordBreak: 'break-word',
  33. textAlign: "left",
  34. padding:'0 10px',
  35. color:'#363636'
  36. },
  37. })
  38. const SearchList= () => {
  39. const classes = useStyles()
  40. const messages = useSelector(getMessages)
  41. const [value, setValue] = useState<string>('')
  42. const handleSearch = (e: React.ChangeEvent<HTMLInputElement>): void => setValue(format(e.target.value))
  43. const filteredMessages = () => messages.filter((el) =>
  44. el.message.toLowerCase().includes(value.toLowerCase()))
  45. return (
  46. <div>
  47. <Search handleSearch={handleSearch}/>
  48. <div className={classes.containerAbsolute}>
  49. {messages.length > 0 ?
  50. <MenuList >
  51. {filteredMessages().map(({ name, lastName, avatarUrl, color, message, createdAt }) =>
  52. <div className={classes.listItem}>
  53. <MenuItem style={{marginBottom:5}} key={shortid.generate()} onClick={() => console.log('clicked message in rightList')}>
  54. <Avatar alt={name} src={avatarUrl?`http://localhost:3000/${avatarUrl}`:undefined}
  55. sx={{ background: color, width: 44, height: 44, marginRight:2 }}>
  56. {!avatarUrl&&`${firstLetter(name)}${firstLetter(lastName)}`}
  57. </Avatar>
  58. <ListItemText primary={`${firstLetter(name)}${slicedWord(name, 15, 1)}
  59. ${firstLetter(lastName)}${slicedWord(lastName, 15, 1)}`} secondary={timeStamp(createdAt)} />
  60. </MenuItem>
  61. <div className={classes.message}>{message}</div>
  62. </div> )}
  63. </MenuList> :
  64. <AlertInfo name='You do not have messages yet!' />}
  65. </div>
  66. </div>
  67. )
  68. }
  69. export default SearchList