Skip to content
Snippets Groups Projects
withNativeFileDrop.js 850 B
Newer Older
import { DropTarget } from 'react-dnd'
import { NativeTypes } from 'react-dnd-html5-backend'

export default DropTarget(
  NativeTypes.FILE,
  {
    drop(
      { onFileDrop, files, maxFiles, setError, allowedFileExtensions },
      monitor,
    ) {
      const [file] = monitor.getItem().files
      const fileExtention = file.name.split('.')[1]

      if (files.length >= maxFiles) {
        setError('No more files can be added to this section.')
        return
      }

      if (
        allowedFileExtensions &&
        !allowedFileExtensions.includes(fileExtention)
      ) {
        setError('Invalid file type.')
      }

      typeof onFileDrop === 'function' && onFileDrop(file)
    },
  },
  (connect, monitor) => ({
    isFileOver: monitor.isOver(),
    canDropFile: monitor.canDrop(),
    connectFileDrop: connect.dropTarget(),
  }),
)