From c8153966226cc995b8b3d92429b7f39479c62f09 Mon Sep 17 00:00:00 2001 From: Roman Date: Fri, 12 Mar 2021 19:48:09 +0200 Subject: [PATCH] Fix: cluster-settings page back-button navigation is broken (#2330) Signed-off-by: Roman --- src/main/window-manager.ts | 9 ++++--- src/renderer/navigation/events.ts | 39 +++++++++++++++++++++---------- 2 files changed, 31 insertions(+), 17 deletions(-) diff --git a/src/main/window-manager.ts b/src/main/window-manager.ts index 691aa7c66b..af3d2ee1ca 100644 --- a/src/main/window-manager.ts +++ b/src/main/window-manager.ts @@ -138,13 +138,12 @@ export class WindowManager extends Singleton { async navigate(url: string, frameId?: number) { await this.ensureMainWindow(); - let frameInfo: ClusterFrameInfo; - if (frameId) { - frameInfo = Array.from(clusterFrameMap.values()).find((frameInfo) => frameInfo.frameId === frameId); - } + const frameInfo = Array.from(clusterFrameMap.values()).find((frameInfo) => frameInfo.frameId === frameId); + const channel = frameInfo ? "renderer:navigate-in-cluster" : "renderer:navigate"; + this.sendToView({ - channel: "renderer:navigate", + channel, frameInfo, data: [url], }); diff --git a/src/renderer/navigation/events.ts b/src/renderer/navigation/events.ts index 1766a1e0d3..646b1ba415 100644 --- a/src/renderer/navigation/events.ts +++ b/src/renderer/navigation/events.ts @@ -10,22 +10,37 @@ export function bindEvents() { } if (process.isMainFrame) { - // Keep track of active cluster-id for handling IPC/menus/etc. - reaction(() => getMatchedClusterId(), clusterId => { - broadcastMessage("cluster-view:current-id", clusterId); - }, { - fireImmediately: true - }); + bindClusterManagerRouteEvents(); + } else { + bindClusterFrameRouteEvents(); } - // Handle navigation via IPC (e.g. from top menu) - subscribeToBroadcast("renderer:navigate", (event, url: string) => { - logger.info(`[IPC]: ${event.type} ${JSON.stringify(url)}`, event); - navigate(url); - }); - // Reload dashboard window subscribeToBroadcast("renderer:reload", () => { location.reload(); }); } + +// Handle events only in main window renderer process (see also: cluster-manager.tsx) +function bindClusterManagerRouteEvents() { + // Keep track of active cluster-id for handling IPC/menus/etc. + reaction(() => getMatchedClusterId(), clusterId => { + broadcastMessage("cluster-view:current-id", clusterId); + }, { + fireImmediately: true + }); + + // Handle navigation via IPC + subscribeToBroadcast("renderer:navigate", (event, url: string) => { + logger.info(`[IPC]: ${event.type}: ${url}`, { currentLocation: location.href }); + navigate(url); + }); +} + +// Handle cluster-view renderer process events within iframes +function bindClusterFrameRouteEvents() { + subscribeToBroadcast("renderer:navigate-cluster-view", (event, url: string) => { + logger.info(`[IPC]: ${event.type}: ${url}`, { currentLocation: location.href }); + navigate(url); + }); +}