From ae8e47e95f07e4d9abe5745ee807dd97fdae8747 Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Sun, 25 Jul 2021 16:48:30 +0200
Subject: [PATCH] #509 - prevent page reload on requesting a transaction delete

---
 .../transactions/TransactionController.java           |  4 ++--
 src/main/resources/static/js/transactions.js          |  7 +++++--
 .../templates/transactions/deleteTransactionModal.ftl | 11 +++++++++++
 .../resources/templates/transactions/transactions.ftl | 10 +---------
 .../templates/transactions/transactionsMacros.ftl     |  2 +-
 5 files changed, 20 insertions(+), 14 deletions(-)
 create mode 100644 src/main/resources/templates/transactions/deleteTransactionModal.ftl

diff --git a/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionController.java b/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionController.java
index 2668621bb..b3c68ce7c 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionController.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionController.java
@@ -86,9 +86,9 @@ public class TransactionController extends BaseController
 
 		DateTime date = dateService.getDateTimeFromCookie(cookieDate);
 		prepareModelTransactions(filterHelpers.getFilterConfiguration(request), model, date);
-		model.addAttribute("currentTransaction", transactionService.getRepository().getOne(ID));
+		model.addAttribute("transactionToDelete", transactionService.getRepository().getOne(ID));
 
-		return "transactions/transactions";
+		return "transactions/deleteTransactionModal";
 	}
 
 	private void prepareModelTransactions(FilterConfiguration filterConfiguration, Model model, DateTime date)
diff --git a/src/main/resources/static/js/transactions.js b/src/main/resources/static/js/transactions.js
index 8c0c7d274..9a4bc75c8 100644
--- a/src/main/resources/static/js/transactions.js
+++ b/src/main/resources/static/js/transactions.js
@@ -1,7 +1,5 @@
 $(document).ready(function()
 {
-    $('#modalConfirmDelete').modal('open');
-
     // open filter modal if corresponding anchor is in url (originating from hotkeys.js)
     if(window.location.href.endsWith('#modalFilter'))
     {
@@ -260,6 +258,11 @@ $(document).ready(function()
             scrollTop: $(highlightedLarge).offset().top
         }, 500);
     }
+
+    $('.button-request-delete-transaction').click(function()
+    {
+        fetchAndShowModalContent(this.dataset.url, '#deleteModalContainerOnDemand', '#modalConfirmDelete', function(){});
+    });
 });
 
 function isHidden(el)
diff --git a/src/main/resources/templates/transactions/deleteTransactionModal.ftl b/src/main/resources/templates/transactions/deleteTransactionModal.ftl
new file mode 100644
index 000000000..847e92f2e
--- /dev/null
+++ b/src/main/resources/templates/transactions/deleteTransactionModal.ftl
@@ -0,0 +1,11 @@
+<#global locale = static["de.thecodelabs.utils.util.Localization"]>
+<#import "/spring.ftl" as s>
+<#import "../helpers/header.ftl" as header>
+
+<@header.modalConfirmDelete title=locale.getString("info.title.transaction.delete") confirmUrl='/transactions' itemId=transactionToDelete.getID() confirmButtonTextKey='delete'>
+    <#if transactionToDelete.isRepeating()>
+        <p>${locale.getString("info.text.transaction.repeating.delete", transactionToDelete.name)}</p>
+    <#else>
+        <p>${locale.getString("info.text.transaction.delete", transactionToDelete.name)}</p>
+    </#if>
+</@header.modalConfirmDelete>
\ No newline at end of file
diff --git a/src/main/resources/templates/transactions/transactions.ftl b/src/main/resources/templates/transactions/transactions.ftl
index 75eaec1aa..28a841526 100644
--- a/src/main/resources/templates/transactions/transactions.ftl
+++ b/src/main/resources/templates/transactions/transactions.ftl
@@ -91,15 +91,7 @@
                 </@header.content>
             </div>
 
-            <#if currentTransaction??>
-                <@header.modalConfirmDelete title=locale.getString("info.title.transaction.delete") confirmUrl='/transactions' cancelUrlBase='/transactions' itemId=currentTransaction.getID() confirmButtonTextKey='delete'>
-                    <#if currentTransaction.isRepeating()>
-                        <p>${locale.getString("info.text.transaction.repeating.delete", currentTransaction.name)}</p>
-                    <#else>
-                        <p>${locale.getString("info.text.transaction.delete", currentTransaction.name)}</p>
-                    </#if>
-                </@header.modalConfirmDelete>
-            </#if>
+            <div id="deleteModalContainerOnDemand"></div>
 
             <@filterMacros.filterModal filterConfiguration/>
         </main>
diff --git a/src/main/resources/templates/transactions/transactionsMacros.ftl b/src/main/resources/templates/transactions/transactionsMacros.ftl
index e61dafcf7..70c6acb1e 100644
--- a/src/main/resources/templates/transactions/transactionsMacros.ftl
+++ b/src/main/resources/templates/transactions/transactionsMacros.ftl
@@ -49,7 +49,7 @@
         <div class="col s8 l2 xl1 right-align transaction-buttons no-wrap">
             <#if transaction.isEditable()>
                 <@header.buttonFlat url='/transactions/' + transaction.ID?c + '/edit' icon='edit' localizationKey='' classes="no-padding text-default"/>
-                <@header.buttonFlat url='/transactions/' + transaction.ID?c + '/requestDelete' icon='delete' localizationKey='' classes="no-padding text-default"/>
+                <@header.buttonFlat url='/transactions/' + transaction.ID?c + '/requestDelete' icon='delete' localizationKey='' classes="no-padding text-default button-request-delete-transaction" isDataUrl=true/>
             </#if>
         </div>
 </#macro>
-- 
GitLab