index.tsx 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. import List from '@mui/material/List';
  2. import ListItem from '@mui/material/ListItem';
  3. import ListItemText from '@mui/material/ListItemText';
  4. import ListItemAvatar from '@mui/material/ListItemAvatar';
  5. import Avatar from '@mui/material/Avatar';
  6. import LibraryMusicIcon from '@mui/icons-material/LibraryMusic';
  7. import Divider from '@mui/material/Divider';
  8. import { makeStyles } from '@material-ui/core'
  9. import { useEffect, useMemo } from 'react';
  10. import AlertInfo from '../../../../reusableComponents/AlertInfo';
  11. import { timeStampEU,firstLetter,filteredMessages,handleSort,prodAwsS3 } from '../../../../../helpers'
  12. import { TAllMessages } from '../../../../../typescript/redux/allMessages/types'
  13. const useStyles = makeStyles({
  14. container: {
  15. width: '100%',
  16. maxHeight: '86vh',
  17. overflowY: 'scroll',
  18. '&::-webkit-scrollbar': {
  19. width: '0.4em'
  20. },
  21. '&::-webkit-scrollbar-track': {
  22. boxShadow: 'inset 0 0 6px rgba(0,0,0,0.00)',
  23. webkitBoxShadow: 'inset 0 0 6px rgba(0,0,0,0.00)',
  24. backgroundColor: '#eceeec',
  25. },
  26. '&::-webkit-scrollbar-thumb': {
  27. backgroundColor: '#ccc8c8',
  28. },
  29. "&::-webkit-scrollbar-thumb:focus": {
  30. backgroundColor: "#959595",
  31. },
  32. "&::-webkit-scrollbar-thumb:active": {
  33. backgroundColor: "#959595",
  34. },
  35. },
  36. folderIcon: {
  37. margin: 'auto 0px',
  38. color: 'rgba(0, 0, 0, 0.5)',
  39. },
  40. listItem: {
  41. cursor:'pointer',
  42. '&:hover': {
  43. backgroundColor: '#f0f0f0',
  44. }
  45. },
  46. })
  47. interface IAudioList {
  48. messagesMemo: TAllMessages,
  49. value: string,
  50. date: any,
  51. setDisabled: React.Dispatch<boolean>,
  52. sort: boolean,
  53. handleScrollToTheMessage:(_id:string,companionId:string) => void
  54. }
  55. const AudioList = ({ messagesMemo,value,date,sort,setDisabled,handleScrollToTheMessage }: IAudioList) => {
  56. const classes = useStyles()
  57. const filtered = useMemo(() => {
  58. return messagesMemo.filter(({type}:{type:string}) => type === 'audio')
  59. }, [messagesMemo])
  60. const filteredAndSorted = useMemo(() => {
  61. return filteredMessages(handleSort('createdAt', filtered, sort),date,value)
  62. },[filtered,sort,date,value])
  63. useEffect(() => {
  64. setDisabled(filtered.length > 0?false:true)
  65. }, [filtered, setDisabled])
  66. return(
  67. <>
  68. {filteredAndSorted.length > 0 &&
  69. <List className={classes.container}>
  70. {filteredAndSorted.map(({ createdAt, fullType,_id,companionId,name,avatarUrl,lastName,color }) =>
  71. <div key={createdAt}>
  72. <ListItem onClick={() => handleScrollToTheMessage(_id,companionId)}
  73. alignItems="flex-start" className={classes.listItem}>
  74. <ListItemAvatar>
  75. <Avatar alt={name} src={avatarUrl?`${prodAwsS3}/${avatarUrl}`:undefined}
  76. sx={{ background: color, width: 40, height: 40}}>
  77. {`${firstLetter(name)}${firstLetter(lastName)}`}
  78. </Avatar>
  79. </ListItemAvatar>
  80. <ListItemText
  81. primary={fullType}
  82. secondary={timeStampEU(createdAt)}
  83. />
  84. <LibraryMusicIcon className={classes.folderIcon} fontSize='large'/>
  85. </ListItem>
  86. <Divider variant="inset"/>
  87. </div>)}
  88. </List>}
  89. {(value || date) && filteredAndSorted.length === 0 && <AlertInfo name={`Can not find Audio by request: ${value}`} />}
  90. {!value && !date && filteredAndSorted.length === 0 && <AlertInfo name='You do not have Audio yet!'/>}
  91. </>)
  92. }
  93. export default AudioList