From 4183ec10c0ecab8f9c6d0bf1f2360cef3be30ff7 Mon Sep 17 00:00:00 2001 From: Julian Maurice Date: Mon, 18 Mar 2024 16:07:02 +0100 Subject: [PATCH] Bug 36347: Avoid return claims table being loaded twice The issue is caused by these lines in circulation.js: $("#finesholdsissues a[data-toggle='tab']").on("shown.bs.tab", function(e){ $(this).click(); }); When the user clicks on a hidden tab, 'shown.bs.tab' is triggered and then another click event is triggered. And because the table was loaded on tab click, it was loaded twice. Visually it could have caused the rows to be duplicated (it was random, probably due to timing, network latency, ...) I don't know why we need to trigger a click in this case, but removing this will probably break something else, so the fix here is to load the table on 'shown.bs.tab' event instead of 'click' This patch also contains a small fix in refreshReturnClaimsTable which was reloading the table right after the table initialization. Test plan: 1. Check out an item, and in the checkouts table, click "Claim returned" 2. Open the network tab of your browser's developer tools 3. Click on the "Claims" tab, verify that only one call is made to svc/return_claims 4. Verify that the claims table is displayed correctly Signed-off-by: David Nind Signed-off-by: Lucas Gass Signed-off-by: Katrin Fischer (cherry picked from commit 5783d01af00a5bf21527c81a05252d99a2a14e9a) Signed-off-by: Fridolin Somers --- koha-tmpl/intranet-tmpl/prog/js/checkouts.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/js/checkouts.js b/koha-tmpl/intranet-tmpl/prog/js/checkouts.js index 9044ec72c9..6cad61f7d2 100644 --- a/koha-tmpl/intranet-tmpl/prog/js/checkouts.js +++ b/koha-tmpl/intranet-tmpl/prog/js/checkouts.js @@ -963,15 +963,19 @@ $(document).ready(function() { issuesTable.api().ajax.reload(); }); - // Don't load return claims table unless it is clicked on + // Don't load return claims table unless its tab is shown var returnClaimsTable; - $("#return-claims-tab").click( function() { + $("#return-claims-tab").on('shown.bs.tab', function() { refreshReturnClaimsTable(); }); function refreshReturnClaimsTable(){ - loadReturnClaimsTable(); - $("#return-claims-table").DataTable().ajax.reload(); + const table = $('#return-claims-table'); + if ($.fn.dataTable.isDataTable(table)) { + table.DataTable().ajax.reload(); + } else { + loadReturnClaimsTable(); + } } function loadReturnClaimsTable() { if ( ! returnClaimsTable ) {