From a22e50eb50a6f666ecc72aa3d5dc07166846b5f1 Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Sun, 25 Jul 2021 16:54:11 +0200
Subject: [PATCH] #509 - prevent page reload on requesting an account delete

---
 .../budgetmaster/accounts/AccountController.java       |  4 ++--
 src/main/resources/static/js/accounts.js               | 10 +++++-----
 src/main/resources/templates/accounts/accounts.ftl     |  9 +++------
 .../templates/accounts/deleteAccountModal.ftl          |  7 +++++++
 4 files changed, 17 insertions(+), 13 deletions(-)
 create mode 100644 src/main/resources/templates/accounts/deleteAccountModal.ftl

diff --git a/src/main/java/de/deadlocker8/budgetmaster/accounts/AccountController.java b/src/main/java/de/deadlocker8/budgetmaster/accounts/AccountController.java
index 1c4f1bf66..79a913970 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/accounts/AccountController.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/accounts/AccountController.java
@@ -76,8 +76,8 @@ public class AccountController extends BaseController
 	public String requestDeleteAccount(Model model, @PathVariable("ID") Integer ID)
 	{
 		model.addAttribute("accounts", accountService.getAllEntitiesAsc());
-		model.addAttribute("currentAccount", accountService.getRepository().getOne(ID));
-		return "accounts/accounts";
+		model.addAttribute("accountToDelete", accountService.getRepository().getOne(ID));
+		return "accounts/deleteAccountModal";
 	}
 
 	@GetMapping("/{ID}/delete")
diff --git a/src/main/resources/static/js/accounts.js b/src/main/resources/static/js/accounts.js
index fa8533f9d..011c41f15 100644
--- a/src/main/resources/static/js/accounts.js
+++ b/src/main/resources/static/js/accounts.js
@@ -1,10 +1,5 @@
 $(document).ready(function()
 {
-    if($('#modalConfirmDelete').length)
-    {
-        $('#modalConfirmDelete').modal('open');
-    }
-
     if($('#modalAccountNotDeletable').length)
     {
         $('#modalAccountNotDeletable').modal('open');
@@ -14,4 +9,9 @@ $(document).ready(function()
     {
         document.getElementById('account-name').focus();
     }
+
+    $('.button-request-delete-account').click(function()
+    {
+        fetchAndShowModalContent(this.dataset.url, '#deleteModalContainerOnDemand', '#modalConfirmDelete', function(){});
+    });
 });
diff --git a/src/main/resources/templates/accounts/accounts.ftl b/src/main/resources/templates/accounts/accounts.ftl
index 30a6592b0..23f3a3acd 100644
--- a/src/main/resources/templates/accounts/accounts.ftl
+++ b/src/main/resources/templates/accounts/accounts.ftl
@@ -44,7 +44,7 @@
                                     <td>${account.getName()}</td>
                                     <td>
                                         <a href="<@s.url '/accounts/${account.getID()?c}/edit'/>" class="btn-flat no-padding text-default"><i class="material-icons left">edit</i></a>
-                                        <a href="<@s.url '/accounts/${account.getID()?c}/requestDelete'/>" class="btn-flat no-padding text-default"><i class="material-icons left no-margin">delete</i></a>
+                                        <@header.buttonFlat url='/accounts/' + account.ID?c + '/requestDelete' icon='delete' localizationKey='' classes="no-padding text-default button-request-delete-account" isDataUrl=true/>
                                     </td>
                                 </tr>
                             </#if>
@@ -56,13 +56,10 @@
                 </div>
                 </@header.content>
             </div>
+
+            <div id="deleteModalContainerOnDemand"></div>
         </main>
 
-        <#if currentAccount??>
-            <@header.modalConfirmDelete title=locale.getString("info.title.account.delete") confirmUrl='/accounts' cancelUrlBase="/accounts" itemId=currentAccount.getID() confirmButtonTextKey="info.button.account.delete">
-                <p>${locale.getString("info.text.account.delete", currentAccount.getName(), currentAccount.getReferringTransactions()?size)}</p>
-            </@header.modalConfirmDelete>
-        </#if>
 
         <#if accountNotDeletable??>
             <!-- warning account not deletable -->
diff --git a/src/main/resources/templates/accounts/deleteAccountModal.ftl b/src/main/resources/templates/accounts/deleteAccountModal.ftl
new file mode 100644
index 000000000..71b93122b
--- /dev/null
+++ b/src/main/resources/templates/accounts/deleteAccountModal.ftl
@@ -0,0 +1,7 @@
+<#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.account.delete") confirmUrl='/accounts' itemId=accountToDelete.getID() confirmButtonTextKey="info.button.account.delete">
+    <p>${locale.getString("info.text.account.delete", accountToDelete.getName(), accountToDelete.getReferringTransactions()?size)}</p>
+</@header.modalConfirmDelete>
\ No newline at end of file
-- 
GitLab