index.tsx 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. import { makeStyles, TextField } from '@material-ui/core'
  2. import ListItemAvatar from '@mui/material/ListItemAvatar';
  3. import Avatar from '@mui/material/Avatar';
  4. import AddAPhotoIcon from '@mui/icons-material/AddAPhoto';
  5. import { useEffect } from 'react';
  6. import { useDropzone } from 'react-dropzone';
  7. import { format,firstLetter,prodBaseURL } from '../../../../../helpers'
  8. import { IAuthorizationState } from '../../../../../typescript/redux/authorization/interfaces'
  9. const useStyles = makeStyles({
  10. container: {
  11. display: 'flex',
  12. alignItems: 'center',
  13. alignContent:'center',
  14. flexDirection: 'column',
  15. width: '100%',
  16. padding: 20,
  17. paddingTop:0,
  18. position: 'relative',
  19. backgroundColor: '#ffffff',
  20. },
  21. imgWrapper: {
  22. cursor: 'pointer',
  23. marginBottom: 30,
  24. position: 'relative',
  25. },
  26. imgDropZoneOverlay: {
  27. position: 'absolute',
  28. width: 120,
  29. height: 120,
  30. borderRadius: '50%',
  31. backgroundColor: '#6868687d',
  32. left: 0,
  33. zIndex: 1,
  34. display: 'flex',
  35. justifyContent: 'center',
  36. alignContent: 'center',
  37. alignItems:'center'
  38. },
  39. addPhoto: {
  40. color: '#ffffff',
  41. transform: 'scale(1.1)',
  42. '&:hover': {
  43. transform: 'scale(1.3)',
  44. },
  45. },
  46. avatarArrow: {
  47. cursor: 'pointer',
  48. alignSelf: 'flex-end',
  49. '&:hover': {
  50. backgroundColor: 'rgb(62, 149, 231)'
  51. }
  52. }
  53. })
  54. interface IEditList {
  55. user: IAuthorizationState,
  56. name: string,
  57. setName: any,
  58. lastName: string,
  59. setLastName: any,
  60. openBtn: boolean,
  61. setOpenBtn: any,
  62. file:any,
  63. setFile: (file:any) => void
  64. }
  65. const EditList = (props: IEditList) => {
  66. const classes = useStyles()
  67. const { user, name, setName, lastName, setLastName,
  68. openBtn, setOpenBtn,setFile } = props
  69. const { avatarUrl, color } = user
  70. const { getRootProps, getInputProps, acceptedFiles } = useDropzone({
  71. noDrag: true,
  72. accept:'image/*'
  73. });
  74. const handleTextField = (e: React.ChangeEvent<HTMLInputElement>) => {
  75. !openBtn&&setOpenBtn(true)
  76. const value = format(e.target.value)
  77. const name = e.target.name
  78. switch (name) {
  79. case 'name':
  80. setName(value)
  81. break;
  82. case 'lastName':
  83. setLastName(value)
  84. break;
  85. default:
  86. break;
  87. }
  88. }
  89. useEffect(() => {
  90. if (acceptedFiles.slice(-1)[0]) {
  91. setFile(acceptedFiles.slice(-1)[0])
  92. setOpenBtn(true)
  93. }
  94. }, [setFile,setOpenBtn,acceptedFiles])
  95. return (
  96. <div className={classes.container} >
  97. <ListItemAvatar className={classes.imgWrapper}>
  98. <div {...getRootProps({ className: classes.imgDropZoneOverlay })}>
  99. <AddAPhotoIcon className={classes.addPhoto} fontSize='large' />
  100. <input {...getInputProps()}/>
  101. </div>
  102. <Avatar alt={name} src={avatarUrl?`${prodBaseURL}/${avatarUrl}`:undefined}
  103. sx={{ background: color, width: 120, height: 120}}>
  104. {`${firstLetter(name)}${firstLetter(lastName)}`}
  105. </Avatar>
  106. </ListItemAvatar>
  107. <TextField
  108. id="name"
  109. name='name'
  110. label="Name"
  111. value={name}
  112. fullWidth
  113. variant='outlined'
  114. onChange={handleTextField}
  115. style={{marginBottom:20}}
  116. />
  117. <TextField
  118. id="lastName"
  119. name='lastName'
  120. label="LastName"
  121. value={lastName}
  122. fullWidth
  123. variant='outlined'
  124. onChange={handleTextField}
  125. />
  126. </div>
  127. )
  128. };
  129. export default EditList;