index.tsx 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. import { makeStyles } from '@material-ui/core'
  2. import { useSelector } from 'react-redux';
  3. import { useState } from 'react';
  4. import { getState } from '../../../../../redux/authorization/selector'
  5. import { Carousel } from 'react-responsive-carousel';
  6. import DeleteOutlineIcon from '@mui/icons-material/DeleteOutline';
  7. import Avatar from '@mui/material/Avatar';
  8. import { firstLetter, slicedWord, timeStampEU } from '../../../../../helpers'
  9. import DeleteModal from './DeleteModal';
  10. const useStyles = makeStyles({
  11. container: {
  12. width: '100%',
  13. backgroundColor: '#ffffff',
  14. position:'relative',
  15. },
  16. nameTile: {
  17. position:'absolute',
  18. color: '#ffffff',
  19. backgroundColor: 'rgb(0,0,0)',
  20. borderRadius: 10,
  21. padding:8,
  22. fontSize: 18,
  23. zIndex:10,
  24. top: '7%',
  25. left: '50%',
  26. marginLeft: '-45%',
  27. opacity: 0.7,
  28. transition: 'opacity .35s ease-in-out'
  29. },
  30. timeTile: {
  31. position:'absolute',
  32. color: '#ffffff',
  33. backgroundColor: 'rgb(0,0,0)',
  34. borderRadius: 10,
  35. padding:4,
  36. fontSize: 15,
  37. top: '1%',
  38. left: '50%',
  39. marginLeft: '-45%',
  40. opacity: 0.7,
  41. transition: 'opacity .35s ease-in-out'
  42. },
  43. iconDeleteWrapper: {
  44. position: 'absolute',
  45. top: '1%',
  46. right: '9%',
  47. },
  48. iconDelete: {
  49. '&:hover': {
  50. opacity: 1,
  51. color: '#fa0000',
  52. animation: `$shake 0.5s`,
  53. }
  54. },
  55. '@keyframes shake': {
  56. '0%': { transform: 'translate(0.5px, 0.5px) rotate(0deg)'},
  57. '10%': { transform: 'translate(-0.5px, -1px) rotate(-1deg)'},
  58. '20%': { transform: 'translate(-1.5px, 0px) rotate(1deg)'},
  59. '30%': { transform: 'translate(1.5px, 1px) rotate(0deg)'},
  60. '40%': { transform: 'translate(0.5px, -0.5px) rotate(1deg)'},
  61. '50%': { transform: 'translate(-0.5px, 1px) rotate(-1deg)'},
  62. '60%': { transform: 'translate(-1.5px, 0.5px) rotate(0deg)'},
  63. '70%': { transform: 'translate(1.5px, 0.5px) rotate(-1deg)'},
  64. '80%': { transform: 'translate(-0.5px, -0.5px) rotate(1deg)'},
  65. '90%': { transform: 'translate(0.5px, 1px) rotate(0deg)'},
  66. '100%': { transform: 'translate(0.5px, -1px) rotate(-1deg)'},
  67. }
  68. })
  69. const SettingsPicture = () => {
  70. const classes = useStyles()
  71. const { name, lastName, avatarsArr, online } = useSelector(getState)
  72. const [modal, setModal] = useState<boolean>(false);
  73. const [index, setIndex] = useState<number>(0);
  74. const handleClick = (): void => setModal(true)
  75. return (
  76. <div className={classes.container}>
  77. {modal &&
  78. <DeleteModal setModal={setModal} index={index} setIndex={setIndex}/>}
  79. <Carousel onChange={(i)=> setIndex(i)} selectedItem={index}>
  80. {avatarsArr.map(({ avatarUrl, updatedAt }) =>
  81. <div key={avatarUrl}>
  82. <img alt='pic' src={`http://localhost:3000/${avatarUrl}`}/>
  83. <p className="legend">{timeStampEU(updatedAt)}</p>
  84. </div>)}
  85. </Carousel>
  86. <span className={classes.nameTile}>{`${firstLetter(name)}${slicedWord(name, 15, 1)}
  87. ${firstLetter(lastName)}${slicedWord(lastName, 15, 1)}`}</span>
  88. <span className={classes.timeTile}>{online === 'true' ? 'online' : `last seen ${timeStampEU(online)}`}</span>
  89. {avatarsArr.length > 1 &&
  90. <div className={classes.iconDeleteWrapper}>
  91. <Avatar className={classes.iconDelete} onClick={handleClick}
  92. sx={{width: 36, height: 36, backgroundColor: 'rgb(0,0,0)',
  93. color: '#ffffff', opacity: 0.5,cursor:'pointer'}}>
  94. <DeleteOutlineIcon fontSize='medium'/>
  95. </Avatar>
  96. </div>}
  97. </div>
  98. )
  99. }
  100. export default SettingsPicture