use-file-dropzone.ts 849 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. import { useCallback } from 'react';
  2. import { useDropzone, Accept } from 'react-dropzone';
  3. import type { DropzoneState } from 'react-dropzone';
  4. import { AcceptedUploadFileType } from '../../consts';
  5. type DropzoneEditor = {
  6. onUpload?: (files: File[]) => void,
  7. acceptedFileType: AcceptedUploadFileType,
  8. }
  9. export const useFileDropzone = (props: DropzoneEditor): DropzoneState => {
  10. const { onUpload, acceptedFileType } = props;
  11. const dropHandler = useCallback((acceptedFiles: File[]) => {
  12. if (onUpload == null) {
  13. return;
  14. }
  15. onUpload(acceptedFiles);
  16. }, [onUpload]);
  17. const accept: Accept = {
  18. acceptedFileType: [],
  19. };
  20. const disabled = acceptedFileType === AcceptedUploadFileType.NONE;
  21. return useDropzone({
  22. noKeyboard: true,
  23. noClick: true,
  24. disabled,
  25. onDrop: dropHandler,
  26. accept,
  27. });
  28. };