From 237e1ef600eac9305f7bd6fb1c1ce5e4659f90af Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Fri, 15 Nov 2024 15:04:40 +0100 Subject: [PATCH] Bug 38436: Store loaded_from_state in data instead of DT's settings This has been introduced by bug 33484 as we needed to know if the state was loaded (from URL or localStorage). If the state is loaded then we need to: 1. not redirect if only one patron to display (to prevent a blocking situation) 2. display the table (ie. not defer loading) Signed-off-by: Owen Leonard Signed-off-by: Paul Derscheid --- .../intranet-tmpl/prog/en/includes/patron-search.inc | 11 ++++++----- koha-tmpl/intranet-tmpl/prog/js/datatables.js | 7 +++---- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/patron-search.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/patron-search.inc index 87afa1e7c95..f18ec6d2ac1 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/patron-search.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/patron-search.inc @@ -423,13 +423,15 @@ [% END %] [% SET order_column_index = 0 %] [% SET embed = ['extended_attributes','library'] %] - patrons_table = $("#[% table_id | html %]").kohaTable({ + let table_node = $("#[% table_id | html %]"); + patrons_table = table_node.kohaTable({ "ajax": { "url": patron_search_url, "dataSrc": function ( json ) { [% IF redirect_if_one_result %] // redirect if there is only 1 result. // Do not redirect if state has been loaded + let loaded_from_state = table_node.data('loaded_from_state'); if ( !loaded_from_state && first_draw && json.recordsFiltered == 1 ) { let url = '[% redirect_url | url %]'.indexOf("?") != -1 ? '[% redirect_url | url %]&borrowernumber=' + json.data[0].patron_id @@ -777,8 +779,7 @@ parent_block.find(".searchpattern").parent().hide(); }); - let table_dt = patrons_table.DataTable(); - let loaded_from_state = table_dt.settings()[0].loaded_from_state; + let loaded_from_state = patrons_table.data('loaded_from_state'); if ( !defer_loading || loaded_from_state ) { patron_search_form.submit(); } @@ -882,7 +883,7 @@ $("#[% table_id | html %]_search_results").show(); let table_dt = patrons_table.DataTable(); - let loaded_from_state = table_dt.settings()[0].loaded_from_state; + let loaded_from_state = patrons_table.data('loaded_from_state'); if ( !loaded_from_state ) { table_dt.search("").columns().search(""); [% FOR c IN columns %] @@ -898,7 +899,7 @@ [% END %] [% END %] } - table_dt.settings()[0].loaded_from_state = false; + patrons_table.data('loaded_from_state', false); first_draw = 1; // Only redirect if we are coming from here table_dt.draw(); [% IF display_search_description %] diff --git a/koha-tmpl/intranet-tmpl/prog/js/datatables.js b/koha-tmpl/intranet-tmpl/prog/js/datatables.js index ceaa5f44f45..bebcee9a2e9 100644 --- a/koha-tmpl/intranet-tmpl/prog/js/datatables.js +++ b/koha-tmpl/intranet-tmpl/prog/js/datatables.js @@ -907,7 +907,7 @@ function _dt_save_restore_state(table_settings, external_filter_nodes={}){ const url = new URL(window.location.href); let state_from_url = url.searchParams.get( table_key + '_state'); if ( state_from_url ) { - settings.loaded_from_state = true; + $("#" + settings.nTable.id).data('loaded_from_state', true); return JSON.parse(atob(state_from_url)); } @@ -919,7 +919,7 @@ function _dt_save_restore_state(table_settings, external_filter_nodes={}){ state = JSON.parse(state); if (default_save_state_search ) { - settings.loaded_from_state = true; + $("#" + settings.nTable.id).data('loaded_from_state', true); } else { delete state.search; state.columns.forEach(c => delete c.search ); @@ -953,7 +953,7 @@ function _dt_save_restore_state(table_settings, external_filter_nodes={}){ ); }; let stateLoadParams = function (settings, data) { - if (!settings.loaded_from_state) return; + if (!$("#" + settings.nTable.id).data('loaded_from_state')) return; if (data.external_filters) { Object.keys(external_filter_nodes).forEach((k, i) => { @@ -1036,7 +1036,6 @@ function _dt_save_restore_state(table_settings, external_filter_nodes={}){ 'emptyTable': (options.emptyTable) ? options.emptyTable : __("No data available in table") }, 'ajax': _dt_default_ajax({default_filters, options}), - loaded_from_state: false, }, options); } -- 2.34.1