138 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
		
		
			
		
	
	
			138 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
| 
								 | 
							
								const draggable = require('vuedraggable');
							 | 
						||
| 
								 | 
							
								const dropzone = require('./components/dropzone');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function mounted() {
							 | 
						||
| 
								 | 
							
								    this.pageId = this.$el.getAttribute('page-id');
							 | 
						||
| 
								 | 
							
								    this.file = this.newFile();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    this.$http.get(window.baseUrl(`/attachments/get/page/${this.pageId}`)).then(resp => {
							 | 
						||
| 
								 | 
							
								        this.files = resp.data;
							 | 
						||
| 
								 | 
							
								    }).catch(err => {
							 | 
						||
| 
								 | 
							
								        this.checkValidationErrors('get', err);
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								let data = {
							 | 
						||
| 
								 | 
							
								    pageId: null,
							 | 
						||
| 
								 | 
							
								    files: [],
							 | 
						||
| 
								 | 
							
								    fileToEdit: null,
							 | 
						||
| 
								 | 
							
								    file: {},
							 | 
						||
| 
								 | 
							
								    tab: 'list',
							 | 
						||
| 
								 | 
							
								    editTab: 'file',
							 | 
						||
| 
								 | 
							
								    errors: {link: {}, edit: {}, delete: {}}
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const components = {dropzone, draggable};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								let methods = {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    newFile() {
							 | 
						||
| 
								 | 
							
								        return {page_id: this.pageId};
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    getFileUrl(file) {
							 | 
						||
| 
								 | 
							
								        return window.baseUrl(`/attachments/${file.id}`);
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    fileSortUpdate() {
							 | 
						||
| 
								 | 
							
								        this.$http.put(window.baseUrl(`/attachments/sort/page/${this.pageId}`), {files: this.files}).then(resp => {
							 | 
						||
| 
								 | 
							
								            this.$events.emit('success', resp.data.message);
							 | 
						||
| 
								 | 
							
								        }).catch(err => {
							 | 
						||
| 
								 | 
							
								            this.checkValidationErrors('sort', err);
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    startEdit(file) {
							 | 
						||
| 
								 | 
							
								        this.fileToEdit = Object.assign({}, file);
							 | 
						||
| 
								 | 
							
								        this.fileToEdit.link = file.external ? file.path : '';
							 | 
						||
| 
								 | 
							
								        this.editTab = file.external ? 'link' : 'file';
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    deleteFile(file) {
							 | 
						||
| 
								 | 
							
								        if (!file.deleting) return file.deleting = true;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        this.$http.delete(window.baseUrl(`/attachments/${file.id}`)).then(resp => {
							 | 
						||
| 
								 | 
							
								            this.$events.emit('success', resp.data.message);
							 | 
						||
| 
								 | 
							
								            this.files.splice(this.files.indexOf(file), 1);
							 | 
						||
| 
								 | 
							
								        }).catch(err => {
							 | 
						||
| 
								 | 
							
								            this.checkValidationErrors('delete', err)
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    uploadSuccess(upload) {
							 | 
						||
| 
								 | 
							
								        this.files.push(upload.data);
							 | 
						||
| 
								 | 
							
								        this.$events.emit('success', trans('entities.attachments_file_uploaded'));
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    uploadSuccessUpdate(upload) {
							 | 
						||
| 
								 | 
							
								        let fileIndex = this.filesIndex(upload.data);
							 | 
						||
| 
								 | 
							
								        if (fileIndex === -1) {
							 | 
						||
| 
								 | 
							
								            this.files.push(upload.data)
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								            this.files.splice(fileIndex, 1, upload.data);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (this.fileToEdit && this.fileToEdit.id === upload.data.id) {
							 | 
						||
| 
								 | 
							
								            this.fileToEdit = Object.assign({}, upload.data);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        this.$events.emit('success', trans('entities.attachments_file_updated'));
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    checkValidationErrors(groupName, err) {
							 | 
						||
| 
								 | 
							
								        console.error(err);
							 | 
						||
| 
								 | 
							
								        if (typeof err.response.data === "undefined" && typeof err.response.data.validation === "undefined") return;
							 | 
						||
| 
								 | 
							
								        this.errors[groupName] = err.response.data.validation;
							 | 
						||
| 
								 | 
							
								        console.log(this.errors[groupName]);
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    getUploadUrl(file) {
							 | 
						||
| 
								 | 
							
								        let url = window.baseUrl(`/attachments/upload`);
							 | 
						||
| 
								 | 
							
								        if (typeof file !== 'undefined') url += `/${file.id}`;
							 | 
						||
| 
								 | 
							
								        return url;
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    cancelEdit() {
							 | 
						||
| 
								 | 
							
								        this.fileToEdit = null;
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    attachNewLink(file) {
							 | 
						||
| 
								 | 
							
								        file.uploaded_to = this.pageId;
							 | 
						||
| 
								 | 
							
								        this.$http.post(window.baseUrl('/attachments/link'), file).then(resp => {
							 | 
						||
| 
								 | 
							
								            this.files.push(resp.data);
							 | 
						||
| 
								 | 
							
								            this.file = this.newFile();
							 | 
						||
| 
								 | 
							
								            this.$events.emit('success', trans('entities.attachments_link_attached'));
							 | 
						||
| 
								 | 
							
								        }).catch(err => {
							 | 
						||
| 
								 | 
							
								            this.checkValidationErrors('link', err);
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    updateFile(file) {
							 | 
						||
| 
								 | 
							
								        $http.put(window.baseUrl(`/attachments/${file.id}`), file).then(resp => {
							 | 
						||
| 
								 | 
							
								            let search = this.filesIndex(resp.data);
							 | 
						||
| 
								 | 
							
								            if (search === -1) {
							 | 
						||
| 
								 | 
							
								                this.files.push(resp.data);
							 | 
						||
| 
								 | 
							
								            } else {
							 | 
						||
| 
								 | 
							
								                this.files.splice(search, 1, resp.data);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if (this.fileToEdit && !file.external) this.fileToEdit.link = '';
							 | 
						||
| 
								 | 
							
								            this.fileToEdit = false;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            this.$events.emit('success', trans('entities.attachments_updated_success'));
							 | 
						||
| 
								 | 
							
								        }).catch(err => {
							 | 
						||
| 
								 | 
							
								            this.checkValidationErrors('edit', err);
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    filesIndex(file) {
							 | 
						||
| 
								 | 
							
								        for (let i = 0, len = this.files.length; i < len; i++) {
							 | 
						||
| 
								 | 
							
								            if (this.files[i].id === file.id) return i;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return -1;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								module.exports = {
							 | 
						||
| 
								 | 
							
								    data, methods, mounted, components,
							 | 
						||
| 
								 | 
							
								};
							 |