media_upload.js (2426B)
- /* eslint-env browser */
- import statusPosterService from '../../services/status_poster/status_poster.service.js'
- import fileSizeFormatService from '../../services/file_size_format/file_size_format.js'
- import { library } from '@fortawesome/fontawesome-svg-core'
- import { faUpload, faCircleNotch } from '@fortawesome/free-solid-svg-icons'
- library.add(
- faUpload,
- faCircleNotch
- )
- const mediaUpload = {
- data () {
- return {
- uploadCount: 0,
- uploadReady: true
- }
- },
- computed: {
- uploading () {
- return this.uploadCount > 0
- }
- },
- methods: {
- onClick () {
- if (this.uploadReady) {
- this.$refs.input.click()
- }
- },
- uploadFile (file) {
- const self = this
- const store = this.$store
- if (file.size > store.state.instance.uploadlimit) {
- const filesize = fileSizeFormatService.fileSizeFormat(file.size)
- const allowedsize = fileSizeFormatService.fileSizeFormat(store.state.instance.uploadlimit)
- self.$emit('upload-failed', 'file_too_big', { filesize: filesize.num, filesizeunit: filesize.unit, allowedsize: allowedsize.num, allowedsizeunit: allowedsize.unit })
- return
- }
- const formData = new FormData()
- formData.append('file', file)
- self.$emit('uploading')
- self.uploadCount++
- statusPosterService.uploadMedia({ store, formData })
- .then((fileData) => {
- self.$emit('uploaded', fileData)
- self.decreaseUploadCount()
- }, (error) => {
- console.error('Error uploading file', error)
- self.$emit('upload-failed', 'default')
- self.decreaseUploadCount()
- })
- },
- decreaseUploadCount () {
- this.uploadCount--
- if (this.uploadCount === 0) {
- this.$emit('all-uploaded')
- }
- },
- clearFile () {
- this.uploadReady = false
- this.$nextTick(() => {
- this.uploadReady = true
- })
- },
- multiUpload (files) {
- for (const file of files) {
- this.uploadFile(file)
- }
- },
- change ({ target }) {
- this.multiUpload(target.files)
- }
- },
- props: {
- dropFiles: Object,
- disabled: Boolean,
- normalButton: Boolean,
- acceptTypes: {
- type: String,
- default: '*/*'
- }
- },
- watch: {
- dropFiles: function (fileInfos) {
- if (!this.uploading) {
- this.multiUpload(fileInfos)
- }
- }
- }
- }
- export default mediaUpload