From 38aefc5b01067d9fdbf703f3630ee8ae6bf25ce7 Mon Sep 17 00:00:00 2001 From: Alex Andreev Date: Fri, 14 Aug 2020 11:04:41 +0300 Subject: [PATCH] Reconnecting cluster after selection (#685) * Reconnecting selected cluster Signed-off-by: alexfront * Cleaning up ClusteStatus render() method Signed-off-by: alexfront --- src/common/cluster-store.ts | 2 +- .../+cluster-settings/cluster-settings.tsx | 1 + src/renderer/components/app-init/app-init.tsx | 1 - .../cluster-manager/cluster-status.tsx | 70 ++++++++++--------- .../cluster-manager/clusters-menu.tsx | 2 +- 5 files changed, 41 insertions(+), 35 deletions(-) diff --git a/src/common/cluster-store.ts b/src/common/cluster-store.ts index 8dca6d6936..ad25f43f26 100644 --- a/src/common/cluster-store.ts +++ b/src/common/cluster-store.ts @@ -84,7 +84,7 @@ export class ClusterStore extends BaseStore { } isActive(id: ClusterId) { - return this.activeCluster.id === id; + return this.activeClusterId === id; } setActive(id: ClusterId) { diff --git a/src/renderer/components/+cluster-settings/cluster-settings.tsx b/src/renderer/components/+cluster-settings/cluster-settings.tsx index 5feeb64d69..d0a6385ac5 100644 --- a/src/renderer/components/+cluster-settings/cluster-settings.tsx +++ b/src/renderer/components/+cluster-settings/cluster-settings.tsx @@ -16,6 +16,7 @@ import { getMatchedCluster } from "../cluster-manager/cluster-view.route"; export class ClusterSettings extends React.Component { render() { const cluster = getMatchedCluster(); + if (!cluster) return null; const header = ( <> { static async start(rootElem: HTMLElement) { - render(, rootElem); // show loading indicator asap await AppInit.readyStateCheck(rootElem); // wait while all good to run } diff --git a/src/renderer/components/cluster-manager/cluster-status.tsx b/src/renderer/components/cluster-manager/cluster-status.tsx index b7595c17fa..1f5d52f814 100644 --- a/src/renderer/components/cluster-manager/cluster-status.tsx +++ b/src/renderer/components/cluster-manager/cluster-status.tsx @@ -11,6 +11,7 @@ import { Button } from "../button"; import { cssNames, IClassName } from "../../utils"; import { Cluster } from "../../../main/cluster"; import { ClusterId, clusterStore } from "../../../common/cluster-store"; +import { CubeSpinner } from "../spinner"; interface Props { className?: IClassName; @@ -31,17 +32,13 @@ export class ClusterStatus extends React.Component { } async componentDidMount() { - if (this.cluster.disconnected) { - return; - } - this.authOutput = [{ data: "Connecting..." }]; ipcRenderer.on(`kube-auth:${this.cluster.id}`, (evt, res: KubeAuthProxyLog) => { this.authOutput.push({ data: res.data.trimRight(), error: res.error, }); }) - if (!this.cluster.initialized) { + if (!this.cluster.initialized || this.cluster.disconnected) { await this.refreshCluster(); } } @@ -55,48 +52,57 @@ export class ClusterStatus extends React.Component { } reconnect = async () => { - this.authOutput = [{ data: "Reconnecting..." }]; this.isReconnecting = true; await this.refreshCluster(); this.isReconnecting = false; } - render() { + renderContent() { const { authOutput, cluster, hasErrors } = this; - const isDisconnected = !!cluster.disconnected; const failureReason = cluster.failureReason; - const isError = hasErrors || isDisconnected; - return ( -
- {isError && ( - - )} -

- {cluster.preferences.clusterName} -

- {!isDisconnected && ( + if (!hasErrors || this.isReconnecting) { + return ( + <> +
+            

{this.isReconnecting ? "Reconnecting..." : "Connecting..."}

{authOutput.map(({ data, error }, index) => { return

{data}

})}
- )} + + ); + } + return ( + <> + +

+ {cluster.preferences.clusterName} +

+
+          {authOutput.map(({ data, error }, index) => {
+            return 

{data}

+ })} +
{failureReason && (
{failureReason}
)} - {isError && ( -