diff --git a/koha-tmpl/intranet-tmpl/prog/js/datatables.js b/koha-tmpl/intranet-tmpl/prog/js/datatables.js
index 232ee8653f..b336a3a83f 100644
--- a/koha-tmpl/intranet-tmpl/prog/js/datatables.js
+++ b/koha-tmpl/intranet-tmpl/prog/js/datatables.js
@@ -596,7 +596,6 @@ function _dt_default_ajax (params){
}
function _dt_buttons(params){
- let included_ids = params.included_ids || [];
let settings = params.settings || {};
let table_settings = params.table_settings;
@@ -665,12 +664,13 @@ function _dt_buttons(params){
}
);
- if( included_ids.length > 0 ){
+ let included_columns = table_settings.columns.filter(c => !c.cannot_be_toggled);
+ if( included_columns.length > 0 ){
buttons.push(
{
extend: 'colvis',
fade: 100,
- columns: included_ids,
+ columns: included_columns.map(c => "[data-colname='%s']".format(c.columnname)).join(','),
className: "columns_controls",
titleAttr: __("Columns settings"),
text: ' ' + __("Columns") + '',
@@ -738,37 +738,26 @@ function _dt_buttons(params){
return buttons;
}
-function _dt_visibility(table_settings, settings, node){
- var counter = 0;
+function _dt_visibility(table_settings, table_dt){
let hidden_ids = [];
- let included_ids = [];
if ( table_settings ) {
- var columns_settings = table_settings['columns'];
- $(columns_settings).each( function() {
- let used_id = counter;
- let use_names = $(node).data('bKohaColumnsUseNames');
- if ( use_names ) {
- if (!node){
- console.err("bKohaColumnsUseNames is set but node not passed");
- return;
+ var columns_settings = table_settings.columns;
+ let i = 0;
+ let use_names = $(table_dt.table().node()).data('bKohaColumnsUseNames');
+ if ( use_names ) {
+ let hidden_columns = table_settings.columns.filter(c => c.is_hidden);
+ table_dt.columns(hidden_columns.map(c => "[data-colname='%s']".format(c.columnname)).join(',')).every(function(){
+ hidden_ids.push(this.index());
+ });
+ } else {
+ $(columns_settings).each( function(i, c) {
+ if ( c.is_hidden == '1' ) {
+ hidden_ids.push(i);
}
- let selector = '#' + node.attr('id');
- var named_id = $( 'thead th[data-colname="' + this.columnname + '"]', selector ).index( selector + ' th' );
- used_id = named_id;
- }
-
- if ( used_id == -1 ) return;
-
- if ( this['is_hidden'] == "1" ) {
- hidden_ids.push( used_id );
- }
- if ( this['cannot_be_toggled'] == "0" ) {
- included_ids.push( used_id );
- }
- counter++;
- });
+ });
+ }
}
- return [hidden_ids, included_ids];
+ return hidden_ids;
}
function _dt_on_visibility(add_filters, table_node, table_dt){
@@ -894,10 +883,9 @@ function _dt_save_restore_state(table_settings, external_filter_nodes={}){
localStorage.setItem( table_key, JSON.stringify(data) )
}
- function set_default(table_settings, settings){
- let columns = new Array(table_settings.columns.length).fill({visible: true});
- let hidden_ids, included_ids;
- [hidden_ids, included_ids] = _dt_visibility(table_settings, settings, $("#"+settings.nTable.id));
+ function set_default(table_settings, table_dt){
+ let columns = new Array(table_dt.columns()[0].length).fill({visible: true});
+ let hidden_ids = _dt_visibility(table_settings, table_dt);
hidden_ids.forEach((id, i) => { columns[id] = { visible: false } } );
// State is not loaded if time is not passed
return { columns, time: new Date() };
@@ -911,10 +899,10 @@ function _dt_save_restore_state(table_settings, external_filter_nodes={}){
return JSON.parse(atob(state_from_url));
}
- if (!default_save_state) return set_default(table_settings, settings);
+ if (!default_save_state) return set_default(table_settings, this.api());
let state = localStorage.getItem(table_key);
- if (!state) return set_default(table_settings, settings);
+ if (!state) return set_default(table_settings, this.api());
state = JSON.parse(state);
@@ -1039,10 +1027,7 @@ function _dt_save_restore_state(table_settings, external_filter_nodes={}){
}, options);
}
- let hidden_ids, included_ids;
- [hidden_ids, included_ids] = _dt_visibility(table_settings, settings, this)
-
- settings["buttons"] = _dt_buttons({included_ids, settings, table_settings});
+ settings["buttons"] = _dt_buttons({settings, table_settings});
if ( add_filters ) {
settings['orderCellsTop'] = true;