import axios from "axios"; import NProgress from 'nprogress' import 'nprogress/nprogress.css' import NProgressAxios from './nprogress-axios'; export default class BulkAction { constructor(path) { //This path use action url this['path'] = path; // Count selected items this['count'] = ''; // Select action value ex: delete, export this['value'] = '*'; // Select action message this['message'] = ''; // Bulk action view status this['show'] = false; // Bulk action modal status this['modal'] = false; // Bulk action modal action this['loading'] = false; // Selected item list this['selected'] = []; // Select all items this['select_all'] = false; } // Change checkbox status select() { this.show = true; this.select_all = false; this.count = this.selected.length; if (this.count == document.querySelectorAll('[data-bulk-action]').length) { this.select_all = true; } if (!this.count) { this.show = false; } } // Select all items action selectAll() { this.show = false; this.selected = []; if (!this.select_all) { this.show = true; for (let input of document.querySelectorAll('[data-bulk-action]')) { this.selected.push(input.getAttribute('value')); } } this.count = this.selected.length; } change(event) { this.message = event.target.options[event.target.options.selectedIndex].dataset.message; if (typeof(this.message) == "undefined") { this.message = ''; } return this.message; } // Selected item use action action() { var path = document.getElementsByName("bulk_action_path")[0].getAttribute('value'); this.loading = true; axios.post(url +'/common/bulk-actions/' + path, { 'handle': this.value, 'selected': this.selected }) .then(response => { //this.loading = false; //this.modal = false; if (response.data.redirect) { window.location.reload(false); } else { this.loading = false; this.modal = false; // It is necessary to create a new blob object with mime-type explicitly set // otherwise only Chrome works like it should var newBlob = new Blob([response.body], {type: 'application/pdf'}) // IE doesn't allow using a blob object directly as link href // instead it is necessary to use msSaveOrOpenBlob if (window.navigator && window.navigator.msSaveOrOpenBlob) { window.navigator.msSaveOrOpenBlob(newBlob) return } // For other browsers: // Create a link pointing to the ObjectURL containing the blob. const data = window.URL.createObjectURL(newBlob) var link = document.createElement('a') link.href = data link.download = filename + '.pdf' link.click() setTimeout(function () { // For Firefox it is necessary to delay revoking the ObjectURL window.URL.revokeObjectURL(data) }, 100) } }) .catch(error => { //this.loading = false; //this.modal = false; //window.location.reload(false); }); } // Selected items clear clear() { this.show = false; this.select_all = false; this.selected = []; } // Change enabled status status(item_id, event, notify) { var item = event.target; var status = (event.target.checked) ? 'enable' : 'disable'; axios.get(this.path + '/' + item_id + '/' + status) .then(response => { var type = (response.data.success) ? 'success' : 'warning'; if (!response.data.success) { if (item.checked) { item.checked = false; } else { item.checked = true; } } notify({ message: response.data.message, timeout: 5000, icon: 'fas fa-bell', type }); }) .catch(error => { }); } }