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