From 3bd484f92a717f4cbeb65aea945a2129b5accf6c Mon Sep 17 00:00:00 2001 From: Jari Kolehmainen Date: Mon, 30 Nov 2020 13:36:24 +0200 Subject: [PATCH] hide disabled workspaces/clusters Signed-off-by: Jari Kolehmainen --- src/common/__tests__/cluster-store.test.ts | 10 ++++++- src/common/__tests__/workspace-store.test.ts | 11 ++++++- src/common/cluster-store.ts | 1 + src/common/workspace-store.ts | 29 +++++++++++++++---- .../components/+workspaces/workspaces.tsx | 2 +- .../cluster-manager/clusters-menu.tsx | 2 +- 6 files changed, 46 insertions(+), 9 deletions(-) diff --git a/src/common/__tests__/cluster-store.test.ts b/src/common/__tests__/cluster-store.test.ts index 603a7c1b9e..789c3b1fdd 100644 --- a/src/common/__tests__/cluster-store.test.ts +++ b/src/common/__tests__/cluster-store.test.ts @@ -48,6 +48,7 @@ describe("empty config", () => { expect(storedCluster.id).toBe("foo"); expect(storedCluster.preferences.terminalCWD).toBe("/tmp"); expect(storedCluster.preferences.icon).toBe("data:image/jpeg;base64, iVBORw0KGgoAAAANSUhEUgAAA1wAAAKoCAYAAABjkf5"); + expect(storedCluster.enabled).toBe(true); }); it("adds cluster to default workspace", () => { @@ -170,7 +171,8 @@ describe("config with existing clusters", () => { kubeConfig: "foo", contextName: "foo", preferences: { terminalCWD: "/foo" }, - workspace: "foo" + workspace: "foo", + ownerRef: "foo" }, ] }) @@ -208,6 +210,12 @@ describe("config with existing clusters", () => { expect(storedClusters[1].preferences.terminalCWD).toBe("/foo2"); expect(storedClusters[2].id).toBe("cluster3"); }); + + it("marks owned cluster disabled by default", () => { + const storedClusters = clusterStore.clustersList; + expect(storedClusters[0].enabled).toBe(true); + expect(storedClusters[2].enabled).toBe(false); + }); }); describe("pre 2.0 config with an existing cluster", () => { diff --git a/src/common/__tests__/workspace-store.test.ts b/src/common/__tests__/workspace-store.test.ts index e50bb23c99..953f350cb8 100644 --- a/src/common/__tests__/workspace-store.test.ts +++ b/src/common/__tests__/workspace-store.test.ts @@ -6,6 +6,13 @@ jest.mock("electron", () => { getVersion: () => "99.99.99", getPath: () => "tmp", getLocale: () => "en" + }, + ipcRenderer: { + invoke: jest.fn(), + on: jest.fn() + }, + ipcMain: { + handle: jest.fn() } }; }); @@ -60,7 +67,9 @@ describe("workspace store tests", () => { name: "foobar", })); - expect(ws.getById("123").name).toBe("foobar"); + const workspace = ws.getById("123"); + expect(workspace.name).toBe("foobar"); + expect(workspace.enabled).toBe(true); }); it("cannot set a non-existent workspace to be active", () => { diff --git a/src/common/cluster-store.ts b/src/common/cluster-store.ts index 35ec663a55..eda3f2c070 100644 --- a/src/common/cluster-store.ts +++ b/src/common/cluster-store.ts @@ -205,6 +205,7 @@ export class ClusterStore extends BaseStore { if (!(model instanceof Cluster)) { cluster = new Cluster(model); } + cluster.enabled = true; this.clusters.set(model.id, cluster); return cluster; } diff --git a/src/common/workspace-store.ts b/src/common/workspace-store.ts index 75ab36f19e..ecdec9715c 100644 --- a/src/common/workspace-store.ts +++ b/src/common/workspace-store.ts @@ -3,7 +3,7 @@ import { action, computed, observable, toJS, reaction } from "mobx"; import { BaseStore } from "./base-store"; import { clusterStore } from "./cluster-store"; import { appEventBus } from "./event-bus"; -import { broadcastMessage } from "../common/ipc"; +import { broadcastMessage, handleRequest, requestMain } from "../common/ipc"; import logger from "../main/logger"; import type { ClusterId } from "./cluster-store"; @@ -77,16 +77,34 @@ export class Workspace implements WorkspaceModel, WorkspaceState { export class WorkspaceStore extends BaseStore { static readonly defaultId: WorkspaceId = "default"; + private stateRequestChannel = "workspace:states"; private constructor() { super({ configName: "lens-workspace-store", }); + } - if (!ipcRenderer) { - setInterval(() => { - this.pushState(); - }, 5000); + async load() { + await super.load(); + if (ipcRenderer) { + logger.info("[WORKSPACE-STORE] requesting initial state sync"); + await requestMain(this.stateRequestChannel, (states: Map) => { + states.forEach((state, id) => { + const workspace = this.getById(id); + if (workspace) { + workspace.setState(state); + } + }); + }); + } else { + handleRequest(this.stateRequestChannel, (): Map => { + const states = new Map(); + this.workspacesList.forEach((workspace) => { + states.set(workspace.id, workspace.getState()); + }); + return states; + }); } } @@ -157,6 +175,7 @@ export class WorkspaceStore extends BaseStore { return; } this.workspaces.set(id, workspace); + workspace.enabled = true; appEventBus.emit({name: "workspace", action: "add"}); return workspace; } diff --git a/src/renderer/components/+workspaces/workspaces.tsx b/src/renderer/components/+workspaces/workspaces.tsx index ccffcca3b7..4dd3cd14b5 100644 --- a/src/renderer/components/+workspaces/workspaces.tsx +++ b/src/renderer/components/+workspaces/workspaces.tsx @@ -21,7 +21,7 @@ export class Workspaces extends React.Component { @computed get workspaces(): Workspace[] { const currentWorkspaces: Map = new Map(); - workspaceStore.workspacesList.forEach((w) => { + workspaceStore.enabledWorkspacesList.forEach((w) => { currentWorkspaces.set(w.id, w); }); const allWorkspaces = new Map([ diff --git a/src/renderer/components/cluster-manager/clusters-menu.tsx b/src/renderer/components/cluster-manager/clusters-menu.tsx index ab608815aa..66b9ce9a8d 100644 --- a/src/renderer/components/cluster-manager/clusters-menu.tsx +++ b/src/renderer/components/cluster-manager/clusters-menu.tsx @@ -106,7 +106,7 @@ export class ClustersMenu extends React.Component { const { className } = this.props; const { newContexts } = userStore; const workspace = workspaceStore.getById(workspaceStore.currentWorkspaceId); - const clusters = clusterStore.getByWorkspaceId(workspace.id); + const clusters = clusterStore.getByWorkspaceId(workspace.id).filter(cluster => cluster.enabled === true); const activeClusterId = clusterStore.activeCluster; return (