index.tsx 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import { makeStyles, Typography,InputLabel,ListItem,ListItemText ,ListItemIcon } from '@material-ui/core'
  2. import FolderIcon from '@mui/icons-material/Folder';
  3. import { useDropzone } from 'react-dropzone';
  4. import { useEffect } from 'react';
  5. const useStyles = makeStyles({
  6. container: {
  7. width: '100%',
  8. },
  9. dropZone: {
  10. display: 'flex',
  11. flexDirection: 'column',
  12. alignItems: 'center',
  13. alignContent: 'center',
  14. justifyContent: 'center',
  15. width: '100%',
  16. padding: '10px',
  17. borderRadius: 10,
  18. cursor: 'pointer',
  19. marginBottom: 20,
  20. outline: '2px solid #959696',
  21. '&:hover': {
  22. outline: 'dashed #0040b8',
  23. },
  24. },
  25. })
  26. interface IUploadAvatar {
  27. setUpload: React.Dispatch<React.SetStateAction<object>>
  28. }
  29. function UploadAvatar({setUpload}:IUploadAvatar) {
  30. const {
  31. acceptedFiles,
  32. getRootProps,
  33. getInputProps
  34. } = useDropzone({
  35. accept: 'image/jpeg,image/png'
  36. });
  37. const classes = useStyles()
  38. const acceptedFileItems = acceptedFiles.map((file: any) => (
  39. <ListItem key={file.path}>
  40. <ListItemIcon>
  41. <FolderIcon/>
  42. </ListItemIcon>
  43. <ListItemText
  44. primary="Avatar uploaded"
  45. secondary={`${file.path} -${file.size} bytes`}/>
  46. </ListItem>
  47. ));
  48. useEffect(() => {
  49. const file = acceptedFiles[0]
  50. file&&setUpload(file)
  51. }, [setUpload,acceptedFiles])
  52. return (
  53. <section className={classes.container} >
  54. <div {...getRootProps({ className: classes.dropZone })}>
  55. <InputLabel>Drag or drop avatar*</InputLabel>
  56. <input {...getInputProps()} required/>
  57. <img
  58. alt='drop zone img'
  59. src='https://imagga.com/static/images/upload.svg'
  60. width={88}
  61. height={72}
  62. />
  63. <Typography variant="h6" color="initial">*.jpeg,*.png</Typography>
  64. </div>
  65. <aside>
  66. <ul>{acceptedFileItems}</ul>
  67. </aside>
  68. </section>
  69. );
  70. }
  71. export default UploadAvatar