From aa96ddde2808fe1863d3ceab23e1f225551dd9a2 Mon Sep 17 00:00:00 2001
From: Alexandru Munteanu <alexandru.munt@gmail.com>
Date: Wed, 18 Apr 2018 14:12:22 +0300
Subject: [PATCH] fix(file-upload): fix concurrent file uploads

---
 .../src/components/Files/FileSection.js       | 23 +++++++++++++++----
 .../src/components/Files/Files.js             |  2 +-
 2 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/packages/components-faraday/src/components/Files/FileSection.js b/packages/components-faraday/src/components/Files/FileSection.js
index 950e2706c..130766471 100644
--- a/packages/components-faraday/src/components/Files/FileSection.js
+++ b/packages/components-faraday/src/components/Files/FileSection.js
@@ -46,6 +46,7 @@ const FileSection = ({
   disabledFilepicker,
   dropSortableFile,
   previewFile,
+  requestPending,
 }) => (
   <DropSection
     innerRef={instance => {
@@ -89,7 +90,7 @@ const FileSection = ({
     <SortableList
       beginDragProps={['id', 'index', 'name', 'listId']}
       dragHandle={DragHandle}
-      dropItem={dropSortableFile}
+      dropItem={requestPending() ? null : dropSortableFile}
       items={files}
       listId={listId}
       listItem={FileItem}
@@ -113,12 +114,19 @@ export default compose(
     clearError: ({ setError }) => () => {
       setError(e => '')
     },
+    requestPending: ({ isFetching }) => () =>
+      Object.values(isFetching).some(Boolean),
   }),
   withHandlers({
     setError: ({ setError, clearError }) => err => {
       setError(e => err, () => setTimeout(clearError, 3000))
     },
-    disabledFilepicker: ({ files, maxFiles }) => () => files.length >= maxFiles,
+    disabledFilepicker: ({
+      files,
+      maxFiles,
+      isFetching,
+      requestPending,
+    }) => () => files.length >= maxFiles || requestPending(),
   }),
   DropTarget(
     'item',
@@ -167,7 +175,14 @@ export default compose(
     NativeTypes.FILE,
     {
       drop(
-        { files, maxFiles, addFile, allowedFileExtensions, setError },
+        {
+          files,
+          maxFiles,
+          addFile,
+          allowedFileExtensions,
+          setError,
+          requestPending,
+        },
         monitor,
       ) {
         const [file] = monitor.getItem().files
@@ -184,7 +199,7 @@ export default compose(
         ) {
           setError('Invalid file type.')
         } else {
-          addFile(file)
+          !requestPending() && addFile(file)
         }
       },
     },
diff --git a/packages/components-faraday/src/components/Files/Files.js b/packages/components-faraday/src/components/Files/Files.js
index 4d98f7599..e7213fe79 100644
--- a/packages/components-faraday/src/components/Files/Files.js
+++ b/packages/components-faraday/src/components/Files/Files.js
@@ -122,7 +122,7 @@ export default compose(
       otherProps,
       dragProps,
     ) => {
-      // do something if the files is not changing list
+      // do something if the file is not changing list
       const { listId: fromListId } = otherProps
       const { listId: toListId } = dragProps
       if (fromListId === toListId) {
-- 
GitLab