From 79a6e7eec607459be286d61f342d08881940cef4 Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Sun, 29 May 2022 12:07:23 +0200
Subject: [PATCH] Fixed #708 - Add feedback on account select via keyboard

---
 .../budgetmaster/accounts/AccountController.java   | 13 ++++++++++++-
 .../src/main/resources/static/css/style.css        | 14 +++++++++++++-
 .../src/main/resources/static/js/main.js           | 12 ++++++++++++
 3 files changed, 37 insertions(+), 2 deletions(-)

diff --git a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/accounts/AccountController.java b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/accounts/AccountController.java
index 705bb7484..be0cf4286 100644
--- a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/accounts/AccountController.java
+++ b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/accounts/AccountController.java
@@ -19,6 +19,7 @@ import org.springframework.web.bind.annotation.*;
 import org.springframework.web.context.request.WebRequest;
 
 import javax.servlet.http.HttpServletRequest;
+import java.text.MessageFormat;
 import java.util.List;
 import java.util.Optional;
 
@@ -51,6 +52,8 @@ public class AccountController extends BaseController
 		public static final String GLOBAL_ACCOUNT_SELECT_MODAL = "globalAccountSelectModal";
 	}
 
+	private static final String ACCOUNT_SELECTED_INDICATOR = "accountSelected=1";
+
 	private final AccountService accountService;
 	private final IconService iconService;
 
@@ -71,7 +74,15 @@ public class AccountController extends BaseController
 		{
 			return ReturnValues.SETTINGS;
 		}
-		return "redirect:" + referer;
+
+		if(referer.contains(ACCOUNT_SELECTED_INDICATOR))
+		{
+			return MessageFormat.format("redirect:{0}", referer);
+		}
+		else
+		{
+			return MessageFormat.format("redirect:{0}?{1}", referer, ACCOUNT_SELECTED_INDICATOR);
+		}
 	}
 
 	@GetMapping(value = "/{ID}/setAsDefault")
diff --git a/BudgetMasterServer/src/main/resources/static/css/style.css b/BudgetMasterServer/src/main/resources/static/css/style.css
index 385e676b7..81c769ae6 100644
--- a/BudgetMasterServer/src/main/resources/static/css/style.css
+++ b/BudgetMasterServer/src/main/resources/static/css/style.css
@@ -324,10 +324,22 @@ input[type="radio"]:checked + span::after, [type="radio"].with-gap:checked + spa
 }
 
 #globalAccountSelect {
-    padding: 1rem 32px 1rem 32px;
+    padding: 0.6rem 18px;
     display: flex;
     flex-direction: row;
     align-items: center;
+    border: 0.4rem solid transparent;
+}
+
+#globalAccountSelect.active {
+    animation: blink 1s;
+    animation-iteration-count: 1;
+}
+
+@keyframes blink {
+    50% {
+        border-color: var(--color-text);
+    }
 }
 
 #globalAccountSelect:hover {
diff --git a/BudgetMasterServer/src/main/resources/static/js/main.js b/BudgetMasterServer/src/main/resources/static/js/main.js
index b27d109f1..cc2b0c0c3 100644
--- a/BudgetMasterServer/src/main/resources/static/js/main.js
+++ b/BudgetMasterServer/src/main/resources/static/js/main.js
@@ -64,6 +64,8 @@ $(document).ready(function()
             data: {}
         });
     });
+
+    checkUrlParameters();
 });
 
 function fetchAndShowModal(item, containerID, modalID)
@@ -140,3 +142,13 @@ function enableAccountSelectHotKeys()
         }
     });
 }
+
+function checkUrlParameters()
+{
+    const urlParameters = new URLSearchParams(window.location.search);
+    const isAccountSelect = urlParameters.get('accountSelected');
+    if(isAccountSelect !== null)
+    {
+        document.getElementById('globalAccountSelect').classList.add('active');
+    }
+}
-- 
GitLab