index.tsx 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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 VideoLibraryIcon from '@mui/icons-material/VideoLibrary';
  7. import Divider from '@mui/material/Divider';
  8. import { makeStyles } from '@material-ui/core'
  9. import AlertInfo from '../../../../../reusableComponents/AlertInfo';
  10. import { timeStampEU,prodAwsS3,firstLetter } from '../../../../../../helpers'
  11. import { TMessages } from '../../../../../../typescript/redux/messages/types'
  12. const useStyles = makeStyles({
  13. container: {
  14. position: 'absolute',
  15. animationDuration: '0.2s',
  16. animationDirection: 'normal',
  17. animation: `$moveElement`,
  18. },
  19. folderIcon: {
  20. margin: 'auto 0px',
  21. color: '#54b0fc',
  22. },
  23. listItem: {
  24. cursor:'pointer',
  25. '&:hover': {
  26. backgroundColor: '#f0f0f0',
  27. }
  28. },
  29. '@keyframes moveElement': {
  30. '0%': { left: '100%'},
  31. '100%': { left: '0%'},
  32. },
  33. })
  34. interface IVideoList {
  35. openPinned: boolean,
  36. filteredAndSorted: TMessages,
  37. handleScrollToTheMessage: (_id:string) => void,
  38. }
  39. const VideoList = ({ filteredAndSorted,handleScrollToTheMessage,openPinned }: IVideoList) => {
  40. const classes = useStyles()
  41. return filteredAndSorted.length > 0 ?(
  42. <List className={classes.container}>
  43. {filteredAndSorted.map(({ message, createdAt, fullType,_id,name,avatarUrl,lastName,color }) =>
  44. <div key={createdAt}>
  45. <ListItem onClick={() => handleScrollToTheMessage(_id)}
  46. key={createdAt} alignItems="flex-start" className={classes.listItem}>
  47. <ListItemAvatar>
  48. <Avatar alt={name} src={avatarUrl?`${prodAwsS3}/${avatarUrl}`:undefined}
  49. sx={{ background: color, width: 40, height: 40, marginRight:2 }}>
  50. {!avatarUrl&&`${firstLetter(name)}${firstLetter(lastName)}`}
  51. </Avatar>
  52. </ListItemAvatar>
  53. <ListItemText
  54. primary={fullType}
  55. secondary={timeStampEU(createdAt)}
  56. />
  57. <VideoLibraryIcon className={classes.folderIcon} fontSize='large'/>
  58. </ListItem>
  59. <Divider variant="inset"/>
  60. </div>)}
  61. </List>
  62. ): <AlertInfo name={`You do not have ${openPinned&&'Pinned'} Video yet!`}/>
  63. }
  64. export default VideoList