Skip to content
Snippets Groups Projects
withFileSectionDrop.js 1.08 KiB
Newer Older
import { DropTarget } from 'react-dnd'

export default DropTarget(
  'item',
  {
    drop(
      {
        files,
        setError,
        changeList,
        listId: toListId,
        allowedFileExtensions,
        maxFiles = Number.MAX_SAFE_INTEGER,
      },
      monitor,
    ) {
      const { listId: fromListId, id, name } = monitor.getItem()
      const fileExtention = name.split('.')[1]

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

      if (files.length >= maxFiles) {
        setError('No more files can be added to this section.')
        return
      }
      if (toListId === fromListId) return
      changeList(fromListId, toListId, id)
    },
    canDrop({ listId: toListId, setError }, monitor) {
      const { listId: fromListId } = monitor.getItem()
      return toListId !== fromListId
    },
  },
  (connect, monitor) => ({
    isFileItemOver: monitor.isOver(),
    canDropFileItem: monitor.canDrop(),
    connectDropTarget: connect.dropTarget(),
  }),
)