1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00
lens/src/renderer/components/cluster-manager/cluster-status.tsx
Roman e0d88be3e8 cluster-status -- part 1 (ex. ClusterPage.vue)
Signed-off-by: Roman <ixrock@gmail.com>
2020-07-27 09:14:16 -04:00

54 lines
1.5 KiB
TypeScript

import "./cluster-manager.scss"
import type { KubeAuthProxyResponse } from "../../../main/kube-auth-proxy";
import { Cluster, ClusterIpcEvent } from "../../../main/cluster";
import React from "react";
import { ipcRenderer } from "electron";
import { computed, observable } from "mobx";
import { observer } from "mobx-react";
import { Icon } from "../icon";
import { Button } from "../button";
import { Trans } from "@lingui/macro";
interface Props {
cluster: Cluster;
}
@observer
export class ClusterStatus extends React.Component<Props> {
@observable authProxyOutput = "Connecting ...\n"
@computed get clusterId() {
return this.props.cluster.id;
}
componentDidMount() {
ipcRenderer.on(`kube-auth:${this.clusterId}`, (evt, authResponse: KubeAuthProxyResponse) => {
this.authProxyOutput += authResponse.data;
})
}
componentWillUnmount() {
ipcRenderer.removeAllListeners(`kube-auth:${this.clusterId}`);
}
reconnectCluster = () => {
ipcRenderer.send(ClusterIpcEvent.RECONNECT, this.clusterId);
}
render() {
const { authProxyOutput } = this;
const { contextName, online } = this.props.cluster;
return (
<div className="ClusterStatus flex column">
<Icon sticker className="status-icon" material={online ? "https" : "cloud_off"}/>
<h2>{contextName}</h2>
<pre className="kube-auth-stdout">{authProxyOutput}</pre>
<Button
primary label={<Trans>Reconnect</Trans>}
onClick={this.reconnectCluster}
/>
</div>
)
}
}