1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

add reliable mechanism for extensions to activate a cluster

Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
Sebastian Malton 2021-04-08 13:43:59 -04:00
parent 13a06c8df9
commit 872280d57f
2 changed files with 35 additions and 0 deletions

View File

@ -8,6 +8,7 @@ import logger from "../main/logger";
import type { ClusterId } from "./cluster-store";
import { Cluster } from "../main/cluster";
import migrations from "../migrations/workspace-store";
import { clusterViewURL } from "../renderer/components/cluster-manager/cluster-view.route";
export type WorkspaceId = string;
@ -345,9 +346,34 @@ export class WorkspaceStore extends BaseStore<WorkspaceStoreModel> {
if (!this.getById(id)) {
throw new Error(`workspace ${id} doesn't exist`);
}
this.currentWorkspaceId = id;
}
@action
async setActiveCluster(clusterOrId: ClusterId | Cluster): Promise<void> {
const cluster = typeof clusterOrId === "string"
? clusterStore.getById(clusterOrId)
: clusterOrId;
if (!cluster?.enabled) {
throw new Error(`cluster ${(clusterOrId as Cluster)?.id ?? clusterOrId} doesn't exist`);
}
this.setActive(this.getById(cluster.workspace).id);
if (ipcRenderer) {
const { navigate } = await import("../renderer/navigation");
navigate(clusterViewURL({ params: { clusterId: cluster.id } }));
} else {
const { WindowManager } = await import("../main/window-manager");
const windowManager = WindowManager.getInstance() as any;
await windowManager.navigate(clusterViewURL({ params: { clusterId: cluster.id } }));
}
}
@action
addWorkspace(workspace: Workspace) {
const { id, name } = workspace;

View File

@ -1,6 +1,7 @@
import { Singleton } from "../core-api/utils";
import { workspaceStore as internalWorkspaceStore, WorkspaceStore as InternalWorkspaceStore, Workspace, WorkspaceId } from "../../common/workspace-store";
import { ObservableMap } from "mobx";
import { Cluster, ClusterId } from "../core-api/stores";
export { Workspace } from "../../common/workspace-store";
export type { WorkspaceId, WorkspaceModel } from "../../common/workspace-store";
@ -113,6 +114,14 @@ export class WorkspaceStore extends Singleton {
removeWorkspaceById(id: WorkspaceId) {
return internalWorkspaceStore.removeWorkspaceById(id);
}
/**
* Sets the cluster and its workspace as active
* @param clusterOrId the cluster's ID or instance to set as the active cluster
*/
setActiveCluster(clusterOrId: ClusterId | Cluster) {
return internalWorkspaceStore.setActiveCluster(clusterOrId);
}
}
export const workspaceStore = WorkspaceStore.getInstance<WorkspaceStore>();