142 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			142 lines
		
	
	
		
			4.1 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) {
 | |
|         if (file.external && file.path.indexOf('http') !== 0) {
 | |
|             return file.path;
 | |
|         }
 | |
|         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 this.$set(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) {
 | |
|         if (typeof err.response.data === "undefined" && typeof err.response.data === "undefined") return;
 | |
|         this.errors[groupName] = err.response.data;
 | |
|     },
 | |
| 
 | |
|     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.errors.link = {};
 | |
|         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,
 | |
| }; |