index.tsx 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. import { makeStyles } from '@material-ui/core'
  2. import { useSelector } from 'react-redux';
  3. import { useState } from 'react';
  4. import { getAuthorizationState } 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, prodAwsS3 } from '../../../../../helpers'
  9. import transparentPic from './../../../../../img/transparentPic.png'
  10. import DeleteModal from './DeleteModal';
  11. const useStyles = makeStyles({
  12. container: {
  13. width: '100%',
  14. backgroundColor: '#ffffff',
  15. position:'relative',
  16. },
  17. nameTitle: {
  18. position:'absolute',
  19. color: '#ffffff',
  20. backgroundColor: 'rgb(0,0,0)',
  21. borderRadius: 10,
  22. padding:8,
  23. fontSize: 18,
  24. zIndex:10,
  25. top: '6%',
  26. left: '50%',
  27. marginLeft: '-45%',
  28. opacity: 0.7,
  29. transition: 'opacity .35s ease-in-out'
  30. },
  31. timeTitle: {
  32. position:'absolute',
  33. color: '#ffffff',
  34. backgroundColor: 'rgb(0,0,0)',
  35. borderRadius: 10,
  36. padding:4,
  37. fontSize: 15,
  38. top: '1%',
  39. left: '50%',
  40. marginLeft: '-45%',
  41. opacity: 0.7,
  42. transition: 'opacity .35s ease-in-out'
  43. },
  44. countryTitle: {
  45. position:'absolute',
  46. color: '#ffffff',
  47. backgroundColor: 'rgb(0,0,0)',
  48. borderRadius: 10,
  49. padding:4,
  50. fontSize: 15,
  51. top: '13%',
  52. left: '50%',
  53. marginLeft: '-45%',
  54. opacity: 0.7,
  55. transition: 'opacity .35s ease-in-out'
  56. },
  57. credentialsTitle: {
  58. position:'absolute',
  59. color: '#ffffff',
  60. fontSize: 100,
  61. top: '30%',
  62. left: '38%',
  63. },
  64. credentialsLowTitle: {
  65. position:'absolute',
  66. color: '#ffffff',
  67. fontSize: 25,
  68. top: '90%',
  69. left: '9%',
  70. },
  71. iconDeleteWrapper: {
  72. position: 'absolute',
  73. top: '1%',
  74. right: '9%',
  75. },
  76. iconDelete: {
  77. '&:hover': {
  78. opacity: 1,
  79. color: '#fa0000',
  80. animation: `$shake 0.5s`,
  81. }
  82. },
  83. '@keyframes shake': {
  84. '0%': { transform: 'translate(0.5px, 0.5px) rotate(0deg)'},
  85. '10%': { transform: 'translate(-0.5px, -1px) rotate(-1deg)'},
  86. '20%': { transform: 'translate(-1.5px, 0px) rotate(1deg)'},
  87. '30%': { transform: 'translate(1.5px, 1px) rotate(0deg)'},
  88. '40%': { transform: 'translate(0.5px, -0.5px) rotate(1deg)'},
  89. '50%': { transform: 'translate(-0.5px, 1px) rotate(-1deg)'},
  90. '60%': { transform: 'translate(-1.5px, 0.5px) rotate(0deg)'},
  91. '70%': { transform: 'translate(1.5px, 0.5px) rotate(-1deg)'},
  92. '80%': { transform: 'translate(-0.5px, -0.5px) rotate(1deg)'},
  93. '90%': { transform: 'translate(0.5px, 1px) rotate(0deg)'},
  94. '100%': { transform: 'translate(0.5px, -1px) rotate(-1deg)'},
  95. },
  96. })
  97. const SettingsPicture = () => {
  98. const classes = useStyles()
  99. const { name, lastName, avatarsArr, online,createdAt,color,country } = useSelector(getAuthorizationState)
  100. const [modal, setModal] = useState<boolean>(false);
  101. const [index, setIndex] = useState<number>(0);
  102. const handleClick = (): void => setModal(true)
  103. const isDefault = avatarsArr.length === 0 ? false: true
  104. return (
  105. <div className={classes.container}>
  106. {modal &&
  107. <DeleteModal setModal={setModal} index={index} setIndex={setIndex}/>}
  108. <Carousel onChange={(i)=> setIndex(i)} selectedItem={index}>
  109. {isDefault ?
  110. avatarsArr.map(({ avatarUrl, updatedAt }) =>
  111. <div key={avatarUrl}>
  112. <img alt='pic' src={`${prodAwsS3}/${avatarUrl}`}/>
  113. <p className="legend">{timeStampEU(updatedAt)}</p>
  114. </div>) :
  115. [
  116. <div>
  117. <img alt='transparentPic' src={transparentPic}
  118. style={{ background: `linear-gradient(to bottom, ${color}, ${color} 80%, #5d5d5d 100%)` }} />
  119. <p className="legend">{timeStampEU(createdAt)}</p>
  120. </div>
  121. ]
  122. }
  123. </Carousel>
  124. <span className={classes.nameTitle}>{`${firstLetter(name)}${slicedWord(name, 15, 1)}
  125. ${firstLetter(lastName)}${slicedWord(lastName, 15, 1)}`}</span>
  126. <span className={classes.timeTitle}>{online === 'true' ? 'online' : `last seen ${timeStampEU(online)}`}</span>
  127. <span className={classes.countryTitle}>{country}</span>
  128. {!isDefault&&<span className={classes.credentialsTitle}>{`${firstLetter(name)}${firstLetter(lastName)}`}</span>}
  129. {!isDefault&&<span className={classes.credentialsLowTitle}>{`${firstLetter(name)}${firstLetter(lastName)}`}</span>}
  130. {avatarsArr.length > 0 &&
  131. <div className={classes.iconDeleteWrapper}>
  132. <Avatar className={classes.iconDelete} onClick={handleClick}
  133. sx={{width: 36, height: 36, backgroundColor: 'rgb(0,0,0)',
  134. color: '#ffffff', opacity: 0.5,cursor:'pointer'}}>
  135. <DeleteOutlineIcon fontSize='medium'/>
  136. </Avatar>
  137. </div>}
  138. </div>
  139. )
  140. }
  141. export default SettingsPicture