From 22fb70f9572f28a91b73943284d122057f799f90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julius=20H=C3=A4rtl?= Date: Sat, 4 Apr 2020 21:24:15 +0200 Subject: [PATCH] Add progress indicator and basic uplaod queue MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Julius Härtl --- src/components/AttachmentDragAndDrop.vue | 11 +++----- .../card/CardSidebarTabAttachments.vue | 26 +++++++------------ src/mixins/attachmentUpload.js | 14 ++++++++-- src/services/AttachmentApi.js | 8 ------ src/store/attachment.js | 4 +-- 5 files changed, 28 insertions(+), 35 deletions(-) diff --git a/src/components/AttachmentDragAndDrop.vue b/src/components/AttachmentDragAndDrop.vue index 4c439424f..56f35384d 100644 --- a/src/components/AttachmentDragAndDrop.vue +++ b/src/components/AttachmentDragAndDrop.vue @@ -102,18 +102,15 @@ export default { }, }, methods: { - dragEnter() { - - }, - dragLeave() { - - }, handleDropFiles(event) { this.isDraggingOver = false if (this.isReadOnly) { return } - this.onLocalAttachmentSelected(event.dataTransfer.files[0]) + const files = event.dataTransfer.files + for (let file of files) { + this.onLocalAttachmentSelected(file) + } event.dataTransfer.value = '' }, }, diff --git a/src/components/card/CardSidebarTabAttachments.vue b/src/components/card/CardSidebarTabAttachments.vue index f22efe172..d0b985d17 100644 --- a/src/components/card/CardSidebarTabAttachments.vue +++ b/src/components/card/CardSidebarTabAttachments.vue @@ -28,9 +28,14 @@
    +
  • + {{ attachment.name }} + +
  • b.id - a.id) }, formattedFileSize() { return (filesize) => formatFileSize(filesize) @@ -134,22 +139,11 @@ export default { this.$store.dispatch('fetchAttachments', this.card.id) }, methods: { - dragEnter() { - - }, - dragLeave() { - - }, - handleDropFiles(event) { - this.isDraggingOver = false - if (this.isReadOnly) { - return - } - this.onLocalAttachmentSelected(event.dataTransfer.files[0]) - event.dataTransfer.value = '' - }, handleUploadFile(event) { - this.onLocalAttachmentSelected(event.target.files[0]) + const files = event.target.files ?? [] + for (let file of files) { + this.onLocalAttachmentSelected(file) + } event.target.value = '' }, clickAddNewAttachmment() { diff --git a/src/mixins/attachmentUpload.js b/src/mixins/attachmentUpload.js index ab6b16990..e6e357c02 100644 --- a/src/mixins/attachmentUpload.js +++ b/src/mixins/attachmentUpload.js @@ -23,6 +23,11 @@ import { showError } from '@nextcloud/dialogs' import { formatFileSize } from '@nextcloud/files' export default { + data() { + return { + uploadQueue: {}, + } + }, methods: { async onLocalAttachmentSelected(file) { if (this.maxUploadSize > 0 && file.size > this.maxUploadSize) { @@ -34,6 +39,7 @@ export default { return } + this.$set(this.uploadQueue, file.name, { name: file.name, progress: 0}) const bodyFormData = new FormData() bodyFormData.append('cardId', this.cardId) bodyFormData.append('type', 'deck_file') @@ -42,8 +48,11 @@ export default { await this.$store.dispatch('createAttachment', { cardId: this.cardId, formData: bodyFormData, onUploadProgress: (e) => { - console.log(e) - } }) + const percentCompleted = Math.round((e.loaded * 100) / e.total) + console.debug(percentCompleted) + this.$set(this.uploadQueue[file.name], 'progress', percentCompleted) + } + }) } catch (err) { if (err.response.data.status === 409) { this.overwriteAttachment = err.response.data.data @@ -52,6 +61,7 @@ export default { showError(err.response.data.message) } } + this.$delete(this.uploadQueue, file.name) }, overrideAttachment() { diff --git a/src/services/AttachmentApi.js b/src/services/AttachmentApi.js index 90b23c3dc..b3de97e48 100644 --- a/src/services/AttachmentApi.js +++ b/src/services/AttachmentApi.js @@ -38,18 +38,10 @@ export class AttachmentApi { } async createAttachment({ cardId, formData, onUploadProgress }) { - const config = { - onUploadProgress: function(progressEvent) { - const percentCompleted = Math.round((progressEvent.loaded * 100) / progressEvent.total) - console.log(percentCompleted) - }, - } - const response = await axios({ method: 'POST', url: this.url(`/cards/${cardId}/attachment`), data: formData, - ...config, onUploadProgress, }) return response.data diff --git a/src/store/attachment.js b/src/store/attachment.js index 966958256..8376adf95 100644 --- a/src/store/attachment.js +++ b/src/store/attachment.js @@ -83,8 +83,8 @@ export default { commit('createAttachments', { cardId, attachments }) }, - async createAttachment({ commit }, { cardId, formData }) { - const attachment = await apiClient.createAttachment({ cardId, formData }) + async createAttachment({ commit }, { cardId, formData, onUploadProgress }) { + const attachment = await apiClient.createAttachment({ cardId, formData, onUploadProgress }) commit('createAttachment', { cardId, attachment }) commit('cardIncreaseAttachmentCount', cardId) },