dropzone.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import { useCallback } from 'react';
  2. import { useDropzone } from 'react-dropzone';
  3. import { connect } from 'react-redux';
  4. import { actionUploadFile } from '../actions';
  5. export const MyDropzone = ({ maxFiles, onUpload, onSet }) => {
  6. const onDrop = useCallback(async acceptedFiles => {
  7. let files = []
  8. await Promise.all(acceptedFiles.map(async (file) => {
  9. let result = await onUpload(file)
  10. files.push(result)
  11. console.log(files)
  12. }))
  13. onSet(files)
  14. }, [onUpload])
  15. const { acceptedFiles, getRootProps, getInputProps } = useDropzone({ onDrop, maxFiles: maxFiles })
  16. const files = acceptedFiles.map(file => (
  17. <li key={file.path}>
  18. {file.path} - {file.size} bytes
  19. </li>
  20. ))
  21. return (
  22. <div>
  23. <div {...getRootProps()}>
  24. <input {...getInputProps()} />
  25. <p>Drag 'n' drop some files here, or click to select files</p>
  26. {maxFiles && <span>Max files: {maxFiles}</span>}
  27. </div>
  28. <aside>
  29. <h4>Files</h4>
  30. <ul>{files}</ul>
  31. </aside>
  32. </div>
  33. )
  34. }
  35. export const ConnectDropzone = connect(null, { onUpload: actionUploadFile })(MyDropzone)