forked from AkkomaGang/akkoma-fe
MediaUpload: Correctly handle multiple uploads.
This commit is contained in:
parent
e6a27bcaca
commit
e45f7fe877
3 changed files with 23 additions and 13 deletions
|
@ -5,10 +5,15 @@ import fileSizeFormatService from '../../services/file_size_format/file_size_for
|
||||||
const mediaUpload = {
|
const mediaUpload = {
|
||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
uploading: false,
|
uploadCount: 0,
|
||||||
uploadReady: true
|
uploadReady: true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
computed: {
|
||||||
|
uploading () {
|
||||||
|
return this.uploadCount > 0
|
||||||
|
}
|
||||||
|
},
|
||||||
methods: {
|
methods: {
|
||||||
uploadFile (file) {
|
uploadFile (file) {
|
||||||
const self = this
|
const self = this
|
||||||
|
@ -23,23 +28,27 @@ const mediaUpload = {
|
||||||
formData.append('file', file)
|
formData.append('file', file)
|
||||||
|
|
||||||
self.$emit('uploading')
|
self.$emit('uploading')
|
||||||
self.uploading = true
|
self.uploadCount++
|
||||||
|
|
||||||
statusPosterService.uploadMedia({ store, formData })
|
statusPosterService.uploadMedia({ store, formData })
|
||||||
.then((fileData) => {
|
.then((fileData) => {
|
||||||
self.$emit('uploaded', fileData)
|
self.$emit('uploaded', fileData)
|
||||||
self.uploading = false
|
self.decreaseUploadCount()
|
||||||
}, (error) => { // eslint-disable-line handle-callback-err
|
}, (error) => { // eslint-disable-line handle-callback-err
|
||||||
self.$emit('upload-failed', 'default')
|
self.$emit('upload-failed', 'default')
|
||||||
self.uploading = false
|
self.decreaseUploadCount()
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
decreaseUploadCount() {
|
||||||
|
this.uploadCount--
|
||||||
|
if (this.uploadCount === 0) {
|
||||||
|
this.$emit('all-uploaded')
|
||||||
|
}
|
||||||
|
},
|
||||||
fileDrop (e) {
|
fileDrop (e) {
|
||||||
if (e.dataTransfer.files.length > 0) {
|
if (e.dataTransfer.files.length > 0) {
|
||||||
e.preventDefault() // allow dropping text like before
|
e.preventDefault() // allow dropping text like before
|
||||||
for (const file of e.dataTransfer.files) {
|
this.multiUpload(e.dataTransfer.files)
|
||||||
this.uploadFile(file)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
fileDrag (e) {
|
fileDrag (e) {
|
||||||
|
@ -56,11 +65,13 @@ const mediaUpload = {
|
||||||
this.uploadReady = true
|
this.uploadReady = true
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
change ({ target }) {
|
multiUpload (files) {
|
||||||
for (var i = 0; i < target.files.length; i++) {
|
for (const file of files) {
|
||||||
let file = target.files[i]
|
|
||||||
this.uploadFile(file)
|
this.uploadFile(file)
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
change ({ target }) {
|
||||||
|
this.multiUpload(target.files)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
props: [
|
props: [
|
||||||
|
@ -69,7 +80,7 @@ const mediaUpload = {
|
||||||
watch: {
|
watch: {
|
||||||
'dropFiles': function (fileInfos) {
|
'dropFiles': function (fileInfos) {
|
||||||
if (!this.uploading) {
|
if (!this.uploading) {
|
||||||
this.uploadFile(fileInfos[0])
|
this.multiUpload(fileInfos)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -218,7 +218,6 @@ const PostStatusForm = {
|
||||||
},
|
},
|
||||||
addMediaFile (fileInfo) {
|
addMediaFile (fileInfo) {
|
||||||
this.newStatus.files.push(fileInfo)
|
this.newStatus.files.push(fileInfo)
|
||||||
this.enableSubmit()
|
|
||||||
},
|
},
|
||||||
removeMediaFile (fileInfo) {
|
removeMediaFile (fileInfo) {
|
||||||
let index = this.newStatus.files.indexOf(fileInfo)
|
let index = this.newStatus.files.indexOf(fileInfo)
|
||||||
|
@ -227,7 +226,6 @@ const PostStatusForm = {
|
||||||
uploadFailed (errString, templateArgs) {
|
uploadFailed (errString, templateArgs) {
|
||||||
templateArgs = templateArgs || {}
|
templateArgs = templateArgs || {}
|
||||||
this.error = this.$t('upload.error.base') + ' ' + this.$t('upload.error.' + errString, templateArgs)
|
this.error = this.$t('upload.error.base') + ' ' + this.$t('upload.error.' + errString, templateArgs)
|
||||||
this.enableSubmit()
|
|
||||||
},
|
},
|
||||||
disableSubmit () {
|
disableSubmit () {
|
||||||
this.submitDisabled = true
|
this.submitDisabled = true
|
||||||
|
|
|
@ -172,6 +172,7 @@
|
||||||
@uploading="disableSubmit"
|
@uploading="disableSubmit"
|
||||||
@uploaded="addMediaFile"
|
@uploaded="addMediaFile"
|
||||||
@upload-failed="uploadFailed"
|
@upload-failed="uploadFailed"
|
||||||
|
@all-uploaded="enableSubmit"
|
||||||
/>
|
/>
|
||||||
<div
|
<div
|
||||||
class="emoji-icon"
|
class="emoji-icon"
|
||||||
|
|
Loading…
Reference in a new issue