From 3b3770d6b984bacd29e9684e93f2156e0a983bac Mon Sep 17 00:00:00 2001
From: Jed Fox <git@jedfox.com>
Date: Fri, 30 Jun 2023 16:57:57 -0400
Subject: [PATCH] Restore undo-url-saving behavior (#1234)

---
 .../desktop-client/src/components/FinancesApp.js    | 13 +++++++++++--
 packages/desktop-client/src/global-events.js        |  7 +++++--
 packages/loot-core/typings/window.d.ts              |  2 +-
 upcoming-release-notes/1234.md                      |  6 ++++++
 4 files changed, 23 insertions(+), 5 deletions(-)
 create mode 100644 upcoming-release-notes/1234.md

diff --git a/packages/desktop-client/src/components/FinancesApp.js b/packages/desktop-client/src/components/FinancesApp.js
index 3de4d8aed..84d2be1a2 100644
--- a/packages/desktop-client/src/components/FinancesApp.js
+++ b/packages/desktop-client/src/components/FinancesApp.js
@@ -14,6 +14,8 @@ import {
   NavLink,
   useNavigate,
   BrowserRouter,
+  useLocation,
+  useHref,
 } from 'react-router-dom';
 
 import hotkeys from 'hotkeys-js';
@@ -23,6 +25,7 @@ import { AccountsProvider } from 'loot-core/src/client/data-hooks/accounts';
 import { PayeesProvider } from 'loot-core/src/client/data-hooks/payees';
 import { SpreadsheetProvider } from 'loot-core/src/client/SpreadsheetProvider';
 import checkForUpdateNotification from 'loot-core/src/client/update-notification';
+import * as undo from 'loot-core/src/platform/client/undo';
 
 import Cog from '../icons/v1/Cog';
 import PiggyBank from '../icons/v1/PiggyBank';
@@ -204,7 +207,7 @@ function MobileNavTabs() {
   );
 }
 
-function Redirector({ getAccounts }) {
+function RouterBehaviors({ getAccounts }) {
   let navigate = useNavigate();
   useEffect(() => {
     // Get the accounts and check if any exist. If there are no
@@ -216,6 +219,12 @@ function Redirector({ getAccounts }) {
       }
     });
   }, []);
+
+  let location = useLocation();
+  let href = useHref(location);
+  useEffect(() => {
+    undo.setUndoState('url', href);
+  }, [href]);
 }
 
 function FinancesApp(props) {
@@ -240,7 +249,7 @@ function FinancesApp(props) {
 
   return (
     <BrowserRouter>
-      <Redirector getAccounts={props.getAccounts} />
+      <RouterBehaviors getAccounts={props.getAccounts} />
       <ExposeNavigate />
 
       <View style={{ height: '100%', backgroundColor: colors.n10 }}>
diff --git a/packages/desktop-client/src/global-events.js b/packages/desktop-client/src/global-events.js
index 059745440..7b3427153 100644
--- a/packages/desktop-client/src/global-events.js
+++ b/packages/desktop-client/src/global-events.js
@@ -112,8 +112,11 @@ export function handleGlobalEvents(actions, store) {
         } else {
           actions.closeModal();
 
-          if (window.location.href !== tagged.url) {
-            window.location.href = tagged.url;
+          if (
+            window.location.href.replace(window.location.origin, '') !==
+            tagged.url
+          ) {
+            window.__navigate(tagged.url);
             // This stops propagation of the undo event, which is
             // important because if we are changing URLs any existing
             // undo listeners on the current page don't need to be run
diff --git a/packages/loot-core/typings/window.d.ts b/packages/loot-core/typings/window.d.ts
index 3eea72bc6..989f2ac5f 100644
--- a/packages/loot-core/typings/window.d.ts
+++ b/packages/loot-core/typings/window.d.ts
@@ -8,6 +8,6 @@ declare global {
       openURLInBrowser: (url: string) => void;
     };
 
-    __navigate?: ReturnType<import('react-router')['useNavigate']>;
+    __navigate?: import('react-router').NavigateFunction;
   }
 }
diff --git a/upcoming-release-notes/1234.md b/upcoming-release-notes/1234.md
new file mode 100644
index 000000000..128c15a66
--- /dev/null
+++ b/upcoming-release-notes/1234.md
@@ -0,0 +1,6 @@
+---
+category: Bugfix
+authors: [j-f1]
+---
+
+Stop page from refreshing when undoing
-- 
GitLab