From 1a8542f05dbde8476d634a0da1ac19386358c7d4 Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Tue, 24 Sep 2024 14:20:59 +0200 Subject: [PATCH] Bug 37395: Fix columns visibility on Vue tables On bug 33066 we reworked a lot of datatables.js to make the JS function reusable from the Vue component (and especially the KohaTable component). I guess the regression comes from this change, but I am surprised that we didn't catch it when testing. The was a mistake for _dt_visibility, we didn't pass the node. Actually we cannot pass it as we do not have it yet. This "node" variable is only used when bKohaColumnsUseNames is passed (ie. we do not rely on the order of the columns but we need to rely on their data-colname attributes). There is then a limitation here: we cannot use bKohaColumnsUseNames from Vue, but we do not yet. An ideal fix would be too big for now, especially for an hypothetic use case. Test plan: Confirm that the "Columns" button are now back for the tables of the Vue apps (ERM, Preservation) and that the settings are taken into account (hide by default, etc.) Signed-off-by: Olivier V Signed-off-by: Pedro Amorim Signed-off-by: Katrin Fischer --- koha-tmpl/intranet-tmpl/prog/js/datatables.js | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/js/datatables.js b/koha-tmpl/intranet-tmpl/prog/js/datatables.js index 5f5d81a34f..bfa9514f7d 100644 --- a/koha-tmpl/intranet-tmpl/prog/js/datatables.js +++ b/koha-tmpl/intranet-tmpl/prog/js/datatables.js @@ -774,16 +774,24 @@ function _dt_buttons(params){ return buttons; } -function _dt_visibility(node, table_settings, settings){ +function _dt_visibility(table_settings, settings, node){ var counter = 0; let hidden_ids = []; let included_ids = []; if ( table_settings ) { var columns_settings = table_settings['columns']; $(columns_settings).each( function() { - let selector = '#' + node.attr('id'); - var named_id = $( 'thead th[data-colname="' + this.columnname + '"]', selector ).index( selector + ' th' ); - var used_id = settings.bKohaColumnsUseNames ? named_id : counter; + let used_id = counter; + if ( settings.bKohaColumnsUseNames ) { + if (!node){ + console.err("settings.bKohaColumnsUseNames is set but node not passed"); + return; + } + 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" ) { @@ -969,7 +977,7 @@ function _dt_add_delay(table_dt, table_node, delay_ms) { } let hidden_ids, included_ids; - [hidden_ids, included_ids] = _dt_visibility(this, table_settings, settings) + [hidden_ids, included_ids] = _dt_visibility(table_settings, settings, this) settings["buttons"] = _dt_buttons({included_ids, settings, table_settings}); -- 2.39.5