Bug 35284: Add DT delay to kohaTable

To test:
* When a specific initComplete exists (general patron search)
* When no specific initComplete exists (cities)

=> KO
* ERM tables display twice the "show X entries" dropdown list
* Column filters are not affected

Signed-off-by: David Cook <dcook@prosentient.com.au>

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
(cherry picked from commit 3819f4a57c)
Signed-off-by: Fridolin Somers <fridolin.somers@biblibre.com>
This commit is contained in:
Jonathan Druart 2023-11-08 22:23:20 +01:00 committed by Fridolin Somers
parent 34672f0ca4
commit 857637ddb4

View file

@ -51,7 +51,7 @@ var dataTablesDefaults = {
"lengthMenu": [[10, 20, 50, 100, -1], [10, 20, 50, 100, __('All')]],
"pageLength": 20,
"fixedHeader": true,
initComplete: function( settings) {
initComplete: function( settings ) {
var tableId = settings.nTable.id
var state = settings.oLoadedState;
state && toggledClearFilter(state.search.search, tableId);
@ -61,6 +61,10 @@ var dataTablesDefaults = {
$(this).on( 'search.dt', function ( e, settings ) {
toggledClearFilter(settings.oPreviousSearch.sSearch, tableId);
});
if (settings.ajax) {
_dt_add_delay($("#"+tableId));
}
}
};
@ -917,6 +921,39 @@ function _dt_add_filters(table_node, table_dt, filters_options = {}) {
} );
}
// List of unbind keys (Ctrl, Alt, Direction keys, etc.)
// These keys must not launch filtering
var blacklist_keys = new Array(0, 16, 17, 18, 37, 38, 39, 40);
function _dt_add_delay(table_node, delay_ms) {
let dt = table_node.DataTable();
delay = (typeof delay == 'undefined') ? 500 : delay;
var previousSearch = null;
var timerId = null;
$("#"+table_node.attr('id')+"_wrapper").find(".dataTables_filter input")
.unbind()
.bind("keyup", function(event) {
var input = $(this);
if (blacklist_keys.indexOf(event.keyCode) != -1) {
return;
} else if ( event.keyCode == '13' ) {
dt.search($(input).val()).draw();
} else {
let val = $(input).val();
if (previousSearch === null || previousSearch != val){
window.clearTimeout(timerId);
previousSearch = val;
timerId = window.setTimeout(function(){
dt.search($(input).val()).draw();
}, delay);
}
}
return;
});
}
(function($) {