Browse Source

Added `addFiles` method to core

Artur Paikin 9 years ago
parent
commit
53af1d354b
1 changed files with 56 additions and 49 deletions
  1. 56 49
      src/core/Core.js

+ 56 - 49
src/core/Core.js

@@ -37,8 +37,9 @@ export default class Core {
       files: {}
     }
 
-    // for debugging
+    // for debugging and testing
     global.UppyState = this.state
+    global.UppyAddFiles = this.addFiles.bind(this)
   }
 
   /**
@@ -73,61 +74,67 @@ export default class Core {
     return this.state
   }
 
+  addFiles (files, caller) {
+    const updatedFiles = Object.assign({}, this.state.files)
+
+    files.forEach((file) => {
+      const fileName = file.name
+      const fileType = file.type.split('/')
+      const fileTypeGeneral = fileType[0]
+      const fileTypeSpecific = fileType[1]
+      const fileID = Utils.generateFileID(fileName)
+
+      updatedFiles[fileID] = {
+        acquiredBy: caller,
+        id: fileID,
+        name: fileName,
+        type: {
+          general: fileTypeGeneral,
+          specific: fileTypeSpecific
+        },
+        data: file,
+        progress: 0,
+        uploadURL: ''
+      }
+
+      // TODO figure out if and when we need image preview —
+      // they eat a ton of memory and slow things down subtantially
+
+      // const readImgPreview = (file) => {
+      //   const reader = new FileReader()
+      //   reader.addEventListener('load', (ev) => {
+      //     const imgSrc = ev.target.result
+      //     const updatedFiles = Object.assign({}, this.state.files)
+      //     updatedFiles[file.id].preview = imgSrc
+      //     this.setState({files: updatedFiles})
+      //   })
+      //   reader.addEventListener('error', (err) => {
+      //     this.core.log('FileReader error' + err)
+      //   })
+      //   reader.readAsDataURL(file.data)
+      // }
+
+      // if (fileTypeGeneral === 'image') {
+      //   readImgPreview(updatedFiles[fileID])
+      // }
+    })
+
+    this.setState({files: updatedFiles})
+
+    if (this.opts.autoProceed) {
+      this.emitter.emit('next')
+    }
+  }
+
   /**
    * Registeres listeners for all global actions, like:
    * `file-add`, `file-remove`, `upload-progress`, `reset`
    *
    */
   actions () {
-    // const readImgPreview = (file) => {
-    //   const reader = new FileReader()
-    //   reader.addEventListener('load', (ev) => {
-    //     const imgSrc = ev.target.result
-    //     const updatedFiles = Object.assign({}, this.state.files)
-    //     updatedFiles[file.id].preview = imgSrc
-    //     this.setState({files: updatedFiles})
-    //   })
-    //   reader.addEventListener('error', (err) => {
-    //     this.core.log('FileReader error' + err)
-    //   })
-    //   reader.readAsDataURL(file.data)
-    // }
-
     this.emitter.on('file-add', (data) => {
-      const updatedFiles = Object.assign({}, this.state.files)
-
-      data.acquiredFiles.forEach((file) => {
-        const fileName = file.name
-        const fileType = file.type.split('/')
-        const fileTypeGeneral = fileType[0]
-        const fileTypeSpecific = fileType[1]
-        const fileID = Utils.generateFileID(fileName)
-
-        updatedFiles[fileID] = {
-          acquiredBy: data.plugin,
-          id: fileID,
-          name: fileName,
-          type: {
-            general: fileTypeGeneral,
-            specific: fileTypeSpecific
-          },
-          data: file,
-          progress: 0,
-          uploadURL: ''
-        }
-
-        // TODO figure out if and when we need image preview —
-        // they eat a ton of memory and slow things down subtantially
-        // if (fileTypeGeneral === 'image') {
-        //   readImgPreview(updatedFiles[fileID])
-        // }
-      })
-
-      this.setState({files: updatedFiles})
-
-      if (this.opts.autoProceed) {
-        this.emitter.emit('next')
-      }
+      const { acquiredFiles, plugin } = data
+      this.addFiles(acquiredFiles, plugin)
     })
 
     // `remove-file` removes a file from `state.files`, after successfull upload