index.tsx 3.2 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 LibraryMusicIcon from '@mui/icons-material/LibraryMusic';
  6. import Divider from '@mui/material/Divider';
  7. import { makeStyles } from '@material-ui/core'
  8. import { useEffect, useMemo } from 'react';
  9. import AlertInfo from '../../../../reusableComponents/AlertInfo';
  10. import { timeStampEU,handleDownload,filteredMessages,handleSort,prodAwsS3 } from '../../../../../helpers'
  11. import { TAllMessages } from '../../../../../typescript/redux/allMessages/types'
  12. const useStyles = makeStyles({
  13. container: {
  14. width: '100%',
  15. maxHeight: '86vh',
  16. overflowY: 'scroll',
  17. '&::-webkit-scrollbar': {
  18. width: '0.4em'
  19. },
  20. '&::-webkit-scrollbar-track': {
  21. boxShadow: 'inset 0 0 6px rgba(0,0,0,0.00)',
  22. webkitBoxShadow: 'inset 0 0 6px rgba(0,0,0,0.00)',
  23. backgroundColor: '#eceeec',
  24. },
  25. '&::-webkit-scrollbar-thumb': {
  26. backgroundColor: '#ccc8c8',
  27. },
  28. "&::-webkit-scrollbar-thumb:focus": {
  29. backgroundColor: "#959595",
  30. },
  31. "&::-webkit-scrollbar-thumb:active": {
  32. backgroundColor: "#959595",
  33. },
  34. },
  35. folderIcon: {
  36. color: '#54b0fc',
  37. cursor: 'pointer',
  38. '&:hover': {
  39. color: '#016cc3'
  40. },
  41. },
  42. listItem: {
  43. cursor:'pointer',
  44. '&:hover': {
  45. backgroundColor: '#f0f0f0',
  46. }
  47. },
  48. })
  49. interface IAudioList {
  50. messagesMemo: TAllMessages,
  51. value: string,
  52. date: any,
  53. setDisabled: React.Dispatch<boolean>,
  54. sort: boolean,
  55. handleScrollToTheMessage:(_id:string,companionId:string) => void
  56. }
  57. const AudioList = ({ messagesMemo,value,date,sort,setDisabled,handleScrollToTheMessage }: IAudioList) => {
  58. const classes = useStyles()
  59. const filtered = useMemo(() => {
  60. return messagesMemo.filter(({type}:{type:string}) => type === 'audio')
  61. }, [messagesMemo])
  62. const filteredAndSorted = useMemo(() => {
  63. return filteredMessages(handleSort('createdAt', filtered, sort),date,value)
  64. },[filtered,sort,date,value])
  65. useEffect(() => {
  66. setDisabled(filtered.length > 0?false:true)
  67. }, [filtered, setDisabled])
  68. return(
  69. <>
  70. {filteredAndSorted.length > 0 &&
  71. <List className={classes.container}>
  72. {filteredAndSorted.map(({ message, createdAt, fullType,_id,companionId }) =>
  73. <div key={createdAt}>
  74. <ListItem onClick={() => handleScrollToTheMessage(_id,companionId)}
  75. alignItems="flex-start" className={classes.listItem}>
  76. <ListItemAvatar>
  77. <LibraryMusicIcon onClick={() =>
  78. handleDownload(`${prodAwsS3}/${message}`, fullType)}
  79. className={classes.folderIcon} fontSize='large' />
  80. </ListItemAvatar>
  81. <ListItemText
  82. primary={fullType}
  83. secondary={timeStampEU(createdAt)}
  84. />
  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