dropzone.js 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637
  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(acceptedFiles => {
  7. acceptedFiles.forEach(async (file) => {
  8. let result = await onUpload(file)
  9. onSet(result)
  10. })
  11. }, [onUpload])
  12. const { acceptedFiles, getRootProps, getInputProps } = useDropzone({ onDrop, maxFiles: maxFiles })
  13. const files = acceptedFiles.map(file => (
  14. <li key={file.path}>
  15. {file.path} - {file.size} bytes
  16. </li>
  17. ))
  18. return (
  19. <div>
  20. <div {...getRootProps()}>
  21. <input {...getInputProps()} />
  22. <p>Drag 'n' drop some files here, or click to select files</p>
  23. {maxFiles && <span>Max files: {maxFiles}</span>}
  24. </div>
  25. <aside>
  26. <h4>Files</h4>
  27. <ul>{files}</ul>
  28. </aside>
  29. </div>
  30. )
  31. }
  32. export const ConnectDropzone = connect(null, { onUpload: actionUploadFile })(MyDropzone)