index.tsx 4.0 KB

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