From 1f22aefeb439c9a969520fc4c09aa5b4a5e219b2 Mon Sep 17 00:00:00 2001 From: Jari Kolehmainen Date: Sun, 25 Oct 2020 08:54:05 +0200 Subject: [PATCH] tweak Signed-off-by: Jari Kolehmainen --- extensions/metrics-cluster-feature/renderer.tsx | 14 +++++++++++++- src/extensions/cluster-feature-registry.ts | 10 +++++++--- .../cluster-feature.ts} | 14 +++++++------- src/extensions/core-api/cluster-feature.ts | 2 +- .../components/install-feature.tsx | 17 +++++++++++------ .../components/+cluster-settings/features.tsx | 2 +- 6 files changed, 40 insertions(+), 19 deletions(-) rename src/{main/feature.ts => extensions/cluster-feature.ts} (80%) diff --git a/extensions/metrics-cluster-feature/renderer.tsx b/extensions/metrics-cluster-feature/renderer.tsx index 3d22906d97..dcc6243052 100644 --- a/extensions/metrics-cluster-feature/renderer.tsx +++ b/extensions/metrics-cluster-feature/renderer.tsx @@ -1,12 +1,24 @@ import { Registry, LensRendererExtension } from "@k8slens/extensions" import { MetricsFeature } from "./src/metrics-feature" +import React from "react" export default class ClusterMetricsFeatureExtension extends LensRendererExtension { registerClusterFeatures(registry: Registry.ClusterFeatureRegistry) { this.disposers.push( registry.add({ title: "Metrics Stack", - description: "Enable timeseries data visualization (Prometheus stack) for your cluster.", + components: { + Description: () => { + return ( + + Enable timeseries data visualization (Prometheus stack) for your cluster. + Install this only if you don't have existing Prometheus stack installed. + You can see preview of manifests + here. + + ) + } + }, feature: new MetricsFeature() }) ) diff --git a/src/extensions/cluster-feature-registry.ts b/src/extensions/cluster-feature-registry.ts index fa6fd3db45..900498f48b 100644 --- a/src/extensions/cluster-feature-registry.ts +++ b/src/extensions/cluster-feature-registry.ts @@ -1,10 +1,14 @@ import { observable } from "mobx" -import { Feature } from "../main/feature"; +import { ClusterFeature } from "./cluster-feature"; + +export interface ClusterFeatureComponents { + Description: React.ComponentType; +} export interface ClusterFeatureRegistration { title: string; - description: string; - feature: Feature + components: ClusterFeatureComponents + feature: ClusterFeature } export class ClusterFeatureRegistry { diff --git a/src/main/feature.ts b/src/extensions/cluster-feature.ts similarity index 80% rename from src/main/feature.ts rename to src/extensions/cluster-feature.ts index 59400da15a..08904750e2 100644 --- a/src/main/feature.ts +++ b/src/extensions/cluster-feature.ts @@ -2,25 +2,25 @@ import fs from "fs"; import path from "path" import hb from "handlebars" import { observable } from "mobx" -import { ResourceApplier } from "./resource-applier" -import { Cluster } from "./cluster"; -import logger from "./logger"; +import { ResourceApplier } from "../main/resource-applier" +import { Cluster } from "../main/cluster"; +import logger from "../main/logger"; import { app } from "electron" import { clusterIpc } from "../common/cluster-ipc" -export interface FeatureStatus { +export interface ClusterFeatureStatus { currentVersion: string; installed: boolean; latestVersion: string; canUpgrade: boolean; } -export abstract class Feature { +export abstract class ClusterFeature { name: string; latestVersion: string; config: any; - @observable status: FeatureStatus = { + @observable status: ClusterFeatureStatus = { currentVersion: null, installed: false, latestVersion: null, @@ -33,7 +33,7 @@ export abstract class Feature { abstract async uninstall(cluster: Cluster): Promise; - abstract async updateStatus(cluster: Cluster): Promise; + abstract async updateStatus(cluster: Cluster): Promise; protected async applyResources(cluster: Cluster, resources: string[]) { if (app) { diff --git a/src/extensions/core-api/cluster-feature.ts b/src/extensions/core-api/cluster-feature.ts index 319256e924..f06eba1436 100644 --- a/src/extensions/core-api/cluster-feature.ts +++ b/src/extensions/core-api/cluster-feature.ts @@ -1 +1 @@ -export { Feature, FeatureStatus } from "../../main/feature" +export { ClusterFeature as Feature, ClusterFeatureStatus as FeatureStatus } from "../cluster-feature" diff --git a/src/renderer/components/+cluster-settings/components/install-feature.tsx b/src/renderer/components/+cluster-settings/components/install-feature.tsx index 98201ea9b3..adfc8f2b5f 100644 --- a/src/renderer/components/+cluster-settings/components/install-feature.tsx +++ b/src/renderer/components/+cluster-settings/components/install-feature.tsx @@ -5,17 +5,18 @@ import { Cluster } from "../../../../main/cluster"; import { Button } from "../../button"; import { Notifications } from "../../notifications"; import { Spinner } from "../../spinner"; -import { Feature } from "../../../../main/feature"; +import { ClusterFeature } from "../../../../extensions/cluster-feature"; import { interval } from "../../../utils"; interface Props { cluster: Cluster - feature: Feature + feature: ClusterFeature } @observer export class InstallFeature extends React.Component { @observable loading = false; + @observable message = ""; componentDidMount() { const feature = this.props.feature @@ -32,6 +33,7 @@ export class InstallFeature extends React.Component { disposeOnUnmount(this, reaction(() => feature.status.installed, () => { this.loading = false; + this.message = "" }, { equals: comparer.structural }) ); } @@ -57,9 +59,10 @@ export class InstallFeature extends React.Component { @@ -68,15 +71,17 @@ export class InstallFeature extends React.Component { } {loadingIcon} {!cluster.isAdmin && Actions can only be performed by admins.} + {cluster.isAdmin && this.loading && this.message !== "" && {this.message}} ); } diff --git a/src/renderer/components/+cluster-settings/features.tsx b/src/renderer/components/+cluster-settings/features.tsx index 162f8f26fc..943e190123 100644 --- a/src/renderer/components/+cluster-settings/features.tsx +++ b/src/renderer/components/+cluster-settings/features.tsx @@ -19,7 +19,7 @@ export class Features extends React.Component { <> -

{f.description}

+

)