From 19511daa3b4152b791bcacb472e6e22f1da2c4c1 Mon Sep 17 00:00:00 2001 From: Owen Leonard Date: Fri, 28 Jan 2022 13:00:04 +0000 Subject: [PATCH] Bug 22276: Add client storage of user-selected DataTables configuration MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit This patch enables use of DataTables' built-in session storage of table configurations. DataTables by default uses the browser's localstorage feature to store the state of each DataTable, including which columns have been hidden by the user. Our table settings system has always overridden this saved state. This patch adds a check for a saved configuration state and if present loads the saved state instead of the default state. The system is enabled in this patch on the libraries administration page. To test, apply the patch and open go to Administration -> Libraries. - Use the "Columns" button to change the visibility setting of multiple columns. - Navigate away from the page and then back to test that the visibility settings have been kept. - Go to Administration -> Table settings -> Administration and change the visibility settings for the "libraries" table in a way that it differs from the visibility settings you set manually. - Return to the libraries administration page and confirm that your manual settings are still being loaded instead of the defaults from table settings. Signed-off-by: Solène Desvaux Signed-off-by: Katrin Fischer Signed-off-by: Tomas Cohen Arazi --- .../prog/en/includes/columns_settings.inc | 39 +++++++++++++++++++ .../prog/en/modules/admin/branches.tt | 6 ++- 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/columns_settings.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/columns_settings.inc index 424fcf07de..2bc6f7b9b4 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/columns_settings.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/columns_settings.inc @@ -219,5 +219,44 @@ function KohaTable(id_selector, dt_parameters, table_settings, add_filters) { return table; } + +/* get_columns_saved_state checks for a DataTables configuration saved +* in the browser's local storage. If it is present, the columns +* configuration supplied by Koha is overwritten +* +* It takes two parameters: +* - localstorage_config, the DataTables saved state object from local storage +* - columns_settings, the columns settings object supplied by the template +* +* An example: +* +* var columns_settings = [% ColumnsSettings.GetColumns( 'module', 'page', 'table', 'json' ) | $raw %]; +* var saved_table = localStorage.getItem("DataTables_TABLE_ID_/cgi-bin/koha/PATH/TO/SCRIPT.pl"); +* var updated_settings = get_columns_saved_state( saved_table, columns_settings ); +* +* KohaTable("TABLE_ID", { +* "stateSave": true +* }, updated_settings); +*/ + +function get_columns_saved_state( localstorage_config, columns_settings ){ + var tables = JSON.parse( localstorage_config ); + // if a table configuration was found in local storage, parse it + if( tables ){ + var stateSave_column_visibility = []; + $(tables.columns).each(function(){ + stateSave_column_visibility.push( this.visible === true ? 0 : 1 ); + }); + $.each( columns_settings, function( index, key ){ + if( stateSave_column_visibility[ index ] !== columns_settings[key] ){ + columns_settings[ index ].is_hidden = stateSave_column_visibility[ index ]; + } + }); + return columns_settings; + } else { + return columns_settings; + } +} + diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/branches.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/branches.tt index 638ac9a36b..11185bd235 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/branches.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/branches.tt @@ -492,6 +492,9 @@ Libraries › Administration › Koha [% INCLUDE 'str/tinymce_i18n.inc' %]