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<any>>
  28. }
  29. const UploadAvatar = ({ setUpload }: IUploadAvatar) => {
  30. const {
  31. acceptedFiles,
  32. getRootProps,
  33. getInputProps
  34. } = useDropzone({
  35. accept: 'image/*',
  36. });
  37. useEffect(() => {
  38. setUpload(acceptedFiles[0])
  39. }, [setUpload,acceptedFiles])
  40. const classes = useStyles()
  41. const acceptedFileItems = acceptedFiles.map((file: any) => (
  42. <ListItem key={file.path}>
  43. <ListItemIcon>
  44. <FolderIcon/>
  45. </ListItemIcon>
  46. <ListItemText
  47. primary="Avatar uploaded"
  48. secondary={`${file.path} -${file.size} bytes`}/>
  49. </ListItem>
  50. ));
  51. return (
  52. <section className={classes.container} >
  53. <div {...getRootProps({ className: classes.dropZone })}>
  54. <InputLabel>Drag or drop avatar*</InputLabel>
  55. <input {...getInputProps()}/>
  56. <img
  57. alt='drop zone img'
  58. src='https://imagga.com/static/images/upload.svg'
  59. width={88}
  60. height={72}
  61. />
  62. <Typography variant="h6" color="initial">image/*</Typography>
  63. </div>
  64. <aside>
  65. <ul>{acceptedFileItems}</ul>
  66. </aside>
  67. </section>
  68. );
  69. }
  70. export default UploadAvatar