224 lines
6.2 KiB
JavaScript
Vendored
224 lines
6.2 KiB
JavaScript
Vendored
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'] = '';
|
|
// Action type
|
|
this['type'] = '';
|
|
// 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;
|
|
|
|
this.hideSearchHTML();
|
|
}
|
|
}
|
|
|
|
// Select all items action
|
|
selectAll() {
|
|
this.show = false;
|
|
this.selected = [];
|
|
this.hideSearchHTML();
|
|
|
|
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(type) {
|
|
let action = document.getElementById('index-bulk-actions-' + type);
|
|
|
|
this.value = type;
|
|
|
|
this.message = action.getAttribute('data-message');
|
|
|
|
if (typeof(this.message) == "undefined") {
|
|
this.message = '';
|
|
}
|
|
|
|
this.path = action.getAttribute('data-path');
|
|
|
|
this.type = '*';
|
|
|
|
if (action.getAttribute('data-type')) {
|
|
this.type = action.getAttribute('data-type');
|
|
}
|
|
|
|
return this.message;
|
|
}
|
|
|
|
// Selected item use action
|
|
action() {
|
|
if (this.value == '*') {
|
|
return;
|
|
}
|
|
|
|
this.loading = true;
|
|
|
|
// bwfore version 2.0.23
|
|
if (this.value == 'export') {
|
|
this.type = 'download';
|
|
}
|
|
|
|
switch (this.type) {
|
|
case 'download':
|
|
let download_promise = Promise.resolve(window.axios({
|
|
url: this.path,
|
|
method: 'POST',
|
|
data:{
|
|
'handle': this.value,
|
|
'selected': this.selected
|
|
},
|
|
responseType: 'blob',
|
|
}));
|
|
|
|
download_promise.then((response) => {
|
|
if (response.data.type != 'application/json') {
|
|
const blob = new Blob([response.data], {type: response.data.type});
|
|
const url = window.URL.createObjectURL(blob);
|
|
const link = document.createElement('a');
|
|
|
|
link.href = url;
|
|
|
|
const contentDisposition = response.headers['content-disposition'];
|
|
|
|
let fileName = 'unknown';
|
|
|
|
if (contentDisposition) {
|
|
const fileNameMatch = contentDisposition.match(/filename=(.+)/);
|
|
|
|
if (fileNameMatch.length === 2) {
|
|
fileName = fileNameMatch[1];
|
|
}
|
|
}
|
|
|
|
link.setAttribute('download', fileName);
|
|
|
|
document.body.appendChild(link);
|
|
|
|
link.click();
|
|
link.remove();
|
|
|
|
window.URL.revokeObjectURL(url);
|
|
|
|
this.loading = false;
|
|
this.modal = false;
|
|
this.value = '*';
|
|
this.clear();
|
|
|
|
return;
|
|
}
|
|
|
|
window.location.reload(false);
|
|
});
|
|
|
|
break;
|
|
default:
|
|
let type_promise = Promise.resolve(window.axios.post(this.path, {
|
|
'handle': this.value,
|
|
'selected': this.selected
|
|
}));
|
|
|
|
type_promise.then(response => {
|
|
if (response.data.redirect === true) {
|
|
window.location.reload(false);
|
|
} else if (typeof response.data.redirect === 'string') {
|
|
window.location.href = response.data.redirect;
|
|
}
|
|
})
|
|
.catch(error => {
|
|
//this.loading = false;
|
|
//this.modal = false;
|
|
|
|
//window.location.reload(false);
|
|
})
|
|
.finally(function () {
|
|
//window.location.reload(false);
|
|
});
|
|
}
|
|
}
|
|
|
|
// Selected items clear
|
|
clear() {
|
|
this.show = false;
|
|
this.select_all = false;
|
|
this.selected = [];
|
|
|
|
this.hideSearchHTML();
|
|
}
|
|
|
|
hideSearchHTML() {
|
|
setInterval(() => {
|
|
const search_box_html = document.querySelector('.js-search-box-hidden');
|
|
|
|
if (search_box_html) {
|
|
search_box_html.classList.add('d-none');
|
|
}
|
|
}, 5);
|
|
};
|
|
|
|
// Change enabled status
|
|
status(item_id, event, notify) {
|
|
let item = event.target;
|
|
let status = (event.target.checked) ? 'enable' : 'disable';
|
|
|
|
window.axios.get(this.path + '/' + item_id + '/' + status)
|
|
.then(response => {
|
|
let 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 => {
|
|
});
|
|
}
|
|
}
|