index.tsx 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  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 VideoLibraryIcon from '@mui/icons-material/VideoLibrary';
  6. import Divider from '@mui/material/Divider';
  7. import { makeStyles } from '@material-ui/core'
  8. import { useEffect } 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. '&:hover': {
  44. backgroundColor: '#f0f0f0',
  45. }
  46. },
  47. })
  48. interface IVideoList {
  49. messagesMemo: TAllMessages,
  50. value: string,
  51. date: any,
  52. setDisabled: React.Dispatch<boolean>,
  53. sort: boolean
  54. }
  55. const VideoList = ({ messagesMemo,value,date,sort,setDisabled }: IVideoList) => {
  56. const classes = useStyles()
  57. const filtered = messagesMemo.filter(({type}) => type === 'video')
  58. const filteredAndSorted = filteredMessages(handleSort('createdAt', filtered, sort),date,value)
  59. useEffect(() => {
  60. setDisabled(filtered.length > 0?false:true)
  61. }, [filtered, setDisabled])
  62. return (
  63. <>
  64. {filteredAndSorted.length > 0 &&
  65. <List className={classes.container}>
  66. {filteredAndSorted.map(({ message, createdAt, fullType }) =>
  67. <div key={createdAt}>
  68. <ListItem key={createdAt} alignItems="flex-start" className={classes.listItem}>
  69. <ListItemAvatar>
  70. <VideoLibraryIcon onClick={() =>
  71. handleDownload(`${prodAwsS3}/${message}`, fullType)}
  72. className={classes.folderIcon} fontSize='large' />
  73. </ListItemAvatar>
  74. <ListItemText
  75. primary={fullType}
  76. secondary={timeStampEU(createdAt)}
  77. />
  78. </ListItem>
  79. <Divider variant="inset" />
  80. </div>)}
  81. </List>}
  82. {(value || date)&& filteredAndSorted.length === 0 && <AlertInfo name={`Can not find Video by request: ${value}`} />}
  83. {!value && !date && filteredAndSorted.length === 0 && <AlertInfo name='You do not have Video yet!'/>}
  84. </>
  85. )
  86. }
  87. export default VideoList