From eed6105222d41f72338022722c08552f04d79fa3 Mon Sep 17 00:00:00 2001
From: Michael Clark <5285928+MikesGlitch@users.noreply.github.com>
Date: Fri, 12 Apr 2024 21:28:55 +0100
Subject: [PATCH] Electron: Fix load backup functionality (#2580)

---
 packages/desktop-client/src/components/App.tsx |  2 +-
 packages/desktop-electron/index.js             | 14 +++++++++-----
 packages/desktop-electron/menu.js              |  2 +-
 packages/desktop-electron/preload.js           |  4 ++--
 upcoming-release-notes/2580.md                 |  6 ++++++
 5 files changed, 19 insertions(+), 9 deletions(-)
 create mode 100644 upcoming-release-notes/2580.md

diff --git a/packages/desktop-client/src/components/App.tsx b/packages/desktop-client/src/components/App.tsx
index 0b4ea838e..5fc229e14 100644
--- a/packages/desktop-client/src/components/App.tsx
+++ b/packages/desktop-client/src/components/App.tsx
@@ -77,7 +77,7 @@ function AppInner({ budgetId, cloudFileId }: AppInnerProps) {
   }, []);
 
   useEffect(() => {
-    global.Actual.updateAppMenu(!!budgetId);
+    global.Actual.updateAppMenu(budgetId);
   }, [budgetId]);
 
   return (
diff --git a/packages/desktop-electron/index.js b/packages/desktop-electron/index.js
index d8e033352..909a0cc7f 100644
--- a/packages/desktop-electron/index.js
+++ b/packages/desktop-electron/index.js
@@ -137,7 +137,7 @@ async function createWindow() {
 
   win.on('closed', () => {
     clientWin = null;
-    updateMenu(false);
+    updateMenu();
     unlistenToState();
   });
 
@@ -187,13 +187,17 @@ function isExternalUrl(url) {
   return !url.includes('localhost:') && !url.includes('app://');
 }
 
-function updateMenu(isBudgetOpen) {
+function updateMenu(budgetId) {
+  const isBudgetOpen = !!budgetId;
   const menu = getMenu(isDev, createWindow);
   const file = menu.items.filter(item => item.label === 'File')[0];
   const fileItems = file.submenu.items;
   fileItems
     .filter(item => item.label === 'Load Backup...')
-    .map(item => (item.enabled = isBudgetOpen));
+    .forEach(item => {
+      item.enabled = isBudgetOpen;
+      item.budgetId = budgetId;
+    });
 
   const tools = menu.items.filter(item => item.label === 'Tools')[0];
   tools.submenu.items.forEach(item => {
@@ -362,8 +366,8 @@ ipcMain.on('apply-update', () => {
   updater.apply();
 });
 
-ipcMain.on('update-menu', (event, isBudgetOpen) => {
-  updateMenu(isBudgetOpen);
+ipcMain.on('update-menu', (event, budgetId) => {
+  updateMenu(budgetId);
 });
 
 ipcMain.on('set-theme', theme => {
diff --git a/packages/desktop-electron/menu.js b/packages/desktop-electron/menu.js
index b6fa34657..fc2745118 100644
--- a/packages/desktop-electron/menu.js
+++ b/packages/desktop-electron/menu.js
@@ -12,7 +12,7 @@ function getMenu(isDev, createWindow) {
             if (focusedWindow) {
               if (focusedWindow.webContents.getTitle() === 'Actual') {
                 focusedWindow.webContents.executeJavaScript(
-                  "__actionsForMenu.replaceModal('load-backup')",
+                  `__actionsForMenu.replaceModal('load-backup', { budgetId: '${item.budgetId}' })`,
                 );
               }
             }
diff --git a/packages/desktop-electron/preload.js b/packages/desktop-electron/preload.js
index 2625c58a8..f5f63f059 100644
--- a/packages/desktop-electron/preload.js
+++ b/packages/desktop-electron/preload.js
@@ -49,8 +49,8 @@ contextBridge.exposeInMainWorld('Actual', {
     ipcRenderer.send('apply-update');
   },
 
-  updateAppMenu: isBudgetOpen => {
-    ipcRenderer.send('update-menu', isBudgetOpen);
+  updateAppMenu: budgetId => {
+    ipcRenderer.send('update-menu', budgetId);
   },
 
   getServerSocket: () => {
diff --git a/upcoming-release-notes/2580.md b/upcoming-release-notes/2580.md
new file mode 100644
index 000000000..325aa1f1a
--- /dev/null
+++ b/upcoming-release-notes/2580.md
@@ -0,0 +1,6 @@
+---
+category: Bugfix
+authors: [mikesglitch]
+---
+
+Fix "Load backup" functionality in Electron - no longer throwing fatal error
-- 
GitLab