98 lines
2.9 KiB
JavaScript
98 lines
2.9 KiB
JavaScript
/*
|
|
* This file is part of the Kimai time-tracking app.
|
|
*
|
|
* For the full copyright and license information, please view the LICENSE
|
|
* file that was distributed with this source code.
|
|
*/
|
|
|
|
/*!
|
|
* [KIMAI] KimaiToolbar: some event listener to handle the toolbar/data-table filter, toolbar and navigation
|
|
*/
|
|
|
|
import jQuery from 'jquery';
|
|
import KimaiPlugin from "../KimaiPlugin";
|
|
|
|
export default class KimaiToolbar extends KimaiPlugin {
|
|
|
|
constructor(selector) {
|
|
super();
|
|
this.selector = selector;
|
|
}
|
|
|
|
getId() {
|
|
return 'toolbar';
|
|
}
|
|
|
|
init() {
|
|
const formSelector = this.getSelector();
|
|
const self = this;
|
|
|
|
// This catches all clicks on the pagination and prevents the default action, as we want to reload the page via JS
|
|
jQuery('body').on('click', 'div.navigation ul.pagination li a', function(event) {
|
|
let pager = jQuery(formSelector + " input#page");
|
|
if (pager.length === 0) {
|
|
return;
|
|
}
|
|
event.preventDefault();
|
|
event.stopPropagation();
|
|
let urlParts = jQuery(this).attr('href').split('/');
|
|
let page = urlParts[urlParts.length-1];
|
|
pager.val(page);
|
|
pager.trigger('change');
|
|
self.getContainer().getPlugin('event').trigger('pagination-change');
|
|
return false;
|
|
});
|
|
|
|
// Reset the page if any other value is changed, otherwise we might end up with a limited set
|
|
// of data which does not support the given page - and it would be just wrong to stay in the same page
|
|
jQuery(this.selector +' input').change(function (event) {
|
|
switch (event.target.id) {
|
|
case 'page':
|
|
break;
|
|
default:
|
|
jQuery(formSelector + ' input#page').val(1);
|
|
}
|
|
self.triggerChange();
|
|
});
|
|
|
|
jQuery(formSelector + ' select').change(function (event) {
|
|
let reload = true;
|
|
switch (event.target.id) {
|
|
case 'customer':
|
|
if (jQuery(formSelector + ' select#project').length > 0) {
|
|
reload = false;
|
|
}
|
|
break;
|
|
|
|
case 'project':
|
|
if (jQuery(formSelector + ' select#activity').length > 0) {
|
|
reload = false;
|
|
}
|
|
break;
|
|
}
|
|
jQuery(formSelector + ' input#page').val(1);
|
|
|
|
if (reload) {
|
|
self.triggerChange();
|
|
}
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Triggers an event, that everyone can listen for.
|
|
*/
|
|
triggerChange() {
|
|
this.getContainer().getPlugin('event').trigger('toolbar-change');
|
|
}
|
|
|
|
/**
|
|
* Returns the CSS selector to target the toolbar form.
|
|
*
|
|
* @returns {string}
|
|
*/
|
|
getSelector() {
|
|
return this.selector;
|
|
}
|
|
|
|
}
|