Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

bug:change isDragReject true when maxFiles rejectDrag #1020

Merged
merged 11 commits into from Oct 28, 2020
2 changes: 1 addition & 1 deletion src/index.js
Expand Up @@ -751,7 +751,7 @@ export function useDropzone(options = {}) {
)

const fileCount = draggedFiles.length
const isDragAccept = fileCount > 0 && allFilesAccepted({ files: draggedFiles, accept, minSize, maxSize, multiple })
const isDragAccept = fileCount > 0 && allFilesAccepted({ files: draggedFiles, accept, minSize, maxSize, multiple, maxFiles })
const isDragReject = fileCount > 0 && !isDragAccept

return {
Expand Down
12 changes: 9 additions & 3 deletions src/index.spec.js
Expand Up @@ -2095,11 +2095,13 @@ describe('useDropzone() hook', () => {
it('rejects all files if {multiple} is true and maxFiles is less than files and {accept} criteria is met', async () => {
const onDropSpy = jest.fn()
const onDropRejectedSpy = jest.fn()
const ui = (
<Dropzone accept="image/*" onDrop={onDropSpy} onDropRejected={onDropRejectedSpy} multiple={true} maxFiles={1}>
{({ getRootProps, getInputProps }) => (
const ui = (
<Dropzone accept="image/*" onDrop={onDropSpy} onDropRejected={onDropRejectedSpy} multiple={true} maxFiles={1}>
morijenab marked this conversation as resolved.
Show resolved Hide resolved
{({ getRootProps, getInputProps, isDragReject, isDragAccept }) => (
<div {...getRootProps()}>
<input {...getInputProps()} />
{isDragReject && 'dragReject'}
{isDragAccept && 'dragAccept'}
</div>
)}
</Dropzone>
Expand All @@ -2109,6 +2111,10 @@ describe('useDropzone() hook', () => {
fireDrop(dropzone, createDtWithFiles(images))
await flushPromises(rerender, ui)
expect(onDropRejectedSpy).toHaveBeenCalled()
fireDragEnter(dropzone, createDtWithFiles(images))
await flushPromises(rerender, ui)
expect(dropzone).toHaveTextContent('dragReject')
expect(dropzone).not.toHaveTextContent('dragAccept')
expect(onDropSpy).toHaveBeenCalledWith([], [
{
file: images[0],
Expand Down
4 changes: 2 additions & 2 deletions src/utils/index.js
Expand Up @@ -59,8 +59,8 @@ function isDefined(value) {
return value !== undefined && value !== null
}

export function allFilesAccepted({ files, accept, minSize, maxSize, multiple }) {
if (!multiple && files.length > 1) {
export function allFilesAccepted({ files, accept, minSize, maxSize, multiple, maxFiles }) {
rolandjitsu marked this conversation as resolved.
Show resolved Hide resolved
if ((!multiple && files.length > 1) || (multiple && maxFiles >= 1 && files.length > maxFiles) ) {
return false;
}

Expand Down
21 changes: 20 additions & 1 deletion src/utils/index.spec.js
Expand Up @@ -229,7 +229,26 @@ it('rejects file when single accept criteria as array', () => {
})

})

describe('allFilesAccepted()', () => {

morijenab marked this conversation as resolved.
Show resolved Hide resolved
let utils
beforeEach(async done => {
utils = await import('./index')
done()
})
it('rejects file when multiple accept criteria', () => {
const files = [createFile('hamster.pdf', 100, 'application/pdf'),createFile('fish.pdf', 100, 'application/pdf')];
const images = [createFile('cats.gif', 1234, 'image/gif'), createFile('dogs.gif', 2345, 'image/jpeg')]
expect(utils.allFilesAccepted({ files, multiple: true})).toEqual(true)
expect(utils.allFilesAccepted({ files, multiple: true, maxFiles: 10 })).toEqual(true)
expect(utils.allFilesAccepted({ files, multiple: false, maxFiles: 10 })).toEqual(false)
expect(utils.allFilesAccepted({ files, multiple: true, accept:'image/jpeg' })).toEqual(false)
expect(utils.allFilesAccepted({ files: images, multiple: true,accept:'image/*' })).toEqual(true)
expect(utils.allFilesAccepted({ files, multiple: true, minSize: 110 })).toEqual(false)
expect(utils.allFilesAccepted({ files, multiple: true, maxSize: 99 })).toEqual(false)
expect(utils.allFilesAccepted({ files, multiple: true, maxFiles: 1 })).toEqual(false)
})
})
morijenab marked this conversation as resolved.
Show resolved Hide resolved
function createFile(name, size, type) {
const file = new File([], name, { type })
Object.defineProperty(file, 'size', {
Expand Down