index.tsx 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  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 AlertInfo from '../../../../../reusableComponents/AlertInfo';
  13. import { timeStampEU,prodAwsS3,firstLetter } from '../../../../../../helpers'
  14. import { TMessages } from '../../../../../../typescript/redux/messages/types'
  15. const useStyles = makeStyles({
  16. folderIcon: {
  17. margin: 'auto 0px',
  18. color: 'rgba(0, 0, 0, 0.5)',
  19. },
  20. listItem: {
  21. cursor:'pointer',
  22. '&:hover': {
  23. backgroundColor: '#f0f0f0',
  24. }
  25. },
  26. })
  27. interface IFilesList {
  28. openPinned: boolean,
  29. filteredAndSorted: TMessages,
  30. handleScrollToTheMessage: (_id:string) => void,
  31. }
  32. const FilesList = ({ filteredAndSorted,handleScrollToTheMessage,openPinned }: IFilesList) => {
  33. const classes = useStyles()
  34. return filteredAndSorted.length > 0 ?(
  35. <List>
  36. {filteredAndSorted.map(({ message, createdAt, fullType,_id,name,avatarUrl,lastName,color }) =>
  37. <div key={createdAt}>
  38. <ListItem onClick={() => handleScrollToTheMessage(_id)}
  39. alignItems="flex-start" className={classes.listItem}>
  40. <ListItemAvatar>
  41. <Avatar alt={name} src={avatarUrl?`${prodAwsS3}/${avatarUrl}`:undefined}
  42. sx={{ background: color, width: 40, height: 40, marginRight:2 }}>
  43. {!avatarUrl&&`${firstLetter(name)}${firstLetter(lastName)}`}
  44. </Avatar>
  45. </ListItemAvatar>
  46. <ListItemText
  47. primary={fullType}
  48. secondary={timeStampEU(createdAt)}
  49. />
  50. {fullType&&fullType.includes('audio') &&<LibraryMusicIcon className={classes.folderIcon} fontSize='large' />}
  51. {fullType&&fullType.includes('video') &&<VideoLibraryIcon className={classes.folderIcon} fontSize='large' />}
  52. {fullType&&fullType.includes('image') &&<ImageIcon className={classes.folderIcon} fontSize='large' />}
  53. {fullType && fullType.includes('application') && <FolderIcon className={classes.folderIcon} fontSize='large' />}
  54. </ListItem>
  55. <Divider variant="inset"/>
  56. </div>)}
  57. </List>
  58. ): <AlertInfo name={`You do not have ${openPinned&&'Pinned'} Files yet!`}/>
  59. }
  60. export default FilesList