Преглед изворни кода

@uppy/core: allow duplicate files with onBeforeFileAdded (#4594)

Merlijn Vos пре 1 година
родитељ
комит
aa3f03f033
2 измењених фајлова са 23 додато и 4 уклоњено
  1. 4 4
      packages/@uppy/core/src/Uppy.js
  2. 19 0
      packages/@uppy/core/src/Uppy.test.js

+ 4 - 4
packages/@uppy/core/src/Uppy.js

@@ -59,7 +59,7 @@ class Uppy {
       debug: false,
       restrictions: defaultRestrictionOptions,
       meta: {},
-      onBeforeFileAdded: (currentFile) => currentFile,
+      onBeforeFileAdded: (file, files) => !Object.hasOwn(files, file.id),
       onBeforeUpload: (files) => files,
       store: new DefaultStore(),
       logger: justErrorsLogger,
@@ -547,12 +547,12 @@ class Uppy {
           this.log(`Replaced the blob in the restored ghost file: ${newFile.name}, ${newFile.id}`)
         }
 
-        if (this.checkIfFileAlreadyExists(newFile.id)) {
+        const onBeforeFileAddedResult = this.opts.onBeforeFileAdded(newFile, nextFilesState)
+
+        if (!onBeforeFileAddedResult && this.checkIfFileAlreadyExists(newFile.id)) {
           throw new RestrictionError(this.i18n('noDuplicates', { fileName: newFile.name }), { file: fileToAdd })
         }
 
-        const onBeforeFileAddedResult = this.opts.onBeforeFileAdded(newFile, nextFilesState)
-
         if (onBeforeFileAddedResult === false) {
           // Don’t show UI info for this error, as it should be done by the developer
           throw new RestrictionError('Cannot add the file because onBeforeFileAdded returned false.', { isUserFacing: false, file: fileToAdd })

+ 19 - 0
packages/@uppy/core/src/Uppy.test.js

@@ -702,6 +702,25 @@ describe('src/Core', () => {
       expect(onBeforeFileAdded.mock.calls[0][1]).toEqual({})
     })
 
+    it('should allow uploading duplicate file if explicitly allowed in onBeforeFileAdded', async () => {
+      const core = new Core({ onBeforeFileAdded: () => true })
+      const sameFileBlob = new File([sampleImage], { type: 'image/jpeg' })
+
+      core.addFile({
+        source: 'jest',
+        name: 'foo.jpg',
+        type: 'image/jpeg',
+        data: sameFileBlob,
+      })
+
+      core.addFile({
+        source: 'jest',
+        name: 'foo.jpg',
+        type: 'image/jpeg',
+        data: sameFileBlob,
+      })
+    })
+
     it('should add a file', () => {
       const fileData = new File([sampleImage], { type: 'image/jpeg' })
       const fileAddedEventMock = jest.fn()