From bfacb86438d83c924ced2685eccff5227e8a4644 Mon Sep 17 00:00:00 2001 From: Roman Date: Wed, 13 Oct 2021 09:59:54 +0300 Subject: [PATCH] fixes / responding to comments Signed-off-by: Roman --- integration/__tests__/cluster-pages.tests.ts | 6 +-- src/common/user-store/preferences-helpers.ts | 1 + src/common/user-store/user-store.ts | 4 +- .../components/dock/{index.ts => index.tsx} | 2 +- .../components/dock/install-chart.scss | 8 +++ .../components/dock/terminal-window.tsx | 2 +- .../components/dock/upgrade-chart.store.ts | 32 ++++++----- .../components/dock/upgrade-chart.tsx | 54 +++++++++++++------ 8 files changed, 70 insertions(+), 39 deletions(-) rename src/renderer/components/dock/{index.ts => index.tsx} (95%) diff --git a/integration/__tests__/cluster-pages.tests.ts b/integration/__tests__/cluster-pages.tests.ts index 63dab255ca..e835330a95 100644 --- a/integration/__tests__/cluster-pages.tests.ts +++ b/integration/__tests__/cluster-pages.tests.ts @@ -363,11 +363,7 @@ utils.describeIf(minikubeReady(TEST_NAMESPACE))("Minikube based tests", () => { await kubeApiServerRow.click(); await frame.waitForSelector(".Drawer", { state: "visible" }); - - const podLogsIcon = await frame.waitForSelector(".Drawer .drawer-title .Icon >> text=subject"); - - await podLogsIcon.click(); - + await frame.waitForSelector(".Drawer .drawer-title .Icon >> text=subject").then(button => button.click()); await frame.waitForSelector(".Dock.isOpen"); // Check if controls are available diff --git a/src/common/user-store/preferences-helpers.ts b/src/common/user-store/preferences-helpers.ts index 67faa8a50d..bb2d49abae 100644 --- a/src/common/user-store/preferences-helpers.ts +++ b/src/common/user-store/preferences-helpers.ts @@ -319,4 +319,5 @@ export const DESCRIPTORS = { export const CONSTANTS = { defaultUpdateChannel, updateChannels, + defaultEditorConfig, }; diff --git a/src/common/user-store/user-store.ts b/src/common/user-store/user-store.ts index a42661b280..352d6878be 100644 --- a/src/common/user-store/user-store.ts +++ b/src/common/user-store/user-store.ts @@ -29,7 +29,7 @@ import { kubeConfigDefaultPath } from "../kube-helpers"; import { appEventBus } from "../event-bus"; import path from "path"; import { ObservableToggleSet, toJS } from "../../renderer/utils"; -import { defaultEditorConfig, DESCRIPTORS, EditorConfiguration, KubeconfigSyncValue, UserPreferencesModel, CONSTANTS } from "./preferences-helpers"; +import { CONSTANTS, DESCRIPTORS, EditorConfiguration, KubeconfigSyncValue, UserPreferencesModel } from "./preferences-helpers"; import logger from "../../main/logger"; import { getPath } from "../utils/getPath"; @@ -90,7 +90,7 @@ export class UserStore extends BaseStore /* implements UserStore /** * Monaco editor configs */ - @observable editorConfiguration: EditorConfiguration = defaultEditorConfig; + @observable editorConfiguration: EditorConfiguration = CONSTANTS.defaultEditorConfig; /** * The set of file/folder paths to be synced diff --git a/src/renderer/components/dock/index.ts b/src/renderer/components/dock/index.tsx similarity index 95% rename from src/renderer/components/dock/index.ts rename to src/renderer/components/dock/index.tsx index 67a0d7e5b3..398a250cb2 100644 --- a/src/renderer/components/dock/index.ts +++ b/src/renderer/components/dock/index.tsx @@ -21,7 +21,7 @@ export * from "./dock"; -// registered dock-tab view components +// Registered React components to handle contents per {DockTab.kind} export * from "./terminal-window"; export * from "./create-resource"; export * from "./edit-resource"; diff --git a/src/renderer/components/dock/install-chart.scss b/src/renderer/components/dock/install-chart.scss index 7994caa7eb..19846f148d 100644 --- a/src/renderer/components/dock/install-chart.scss +++ b/src/renderer/components/dock/install-chart.scss @@ -33,5 +33,13 @@ .InstallChartDone { --flex-gap: #{$padding * 1.5}; + + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + z-index: 1; + background: black; padding: $padding * 2; } diff --git a/src/renderer/components/dock/terminal-window.tsx b/src/renderer/components/dock/terminal-window.tsx index 508b0d72c7..a0a71a1bec 100644 --- a/src/renderer/components/dock/terminal-window.tsx +++ b/src/renderer/components/dock/terminal-window.tsx @@ -51,7 +51,7 @@ export class TerminalWindow extends React.Component { ]); } - activate(tabId: TabId = dockStore.selectedTabId) { + activate(tabId: TabId) { if (this.terminal) this.terminal.detach(); // detach previous this.terminal = TerminalStore.getInstance().getTerminal(tabId); this.terminal.attachTo(this.elem); diff --git a/src/renderer/components/dock/upgrade-chart.store.ts b/src/renderer/components/dock/upgrade-chart.store.ts index 5f39bb18a0..e499f431fa 100644 --- a/src/renderer/components/dock/upgrade-chart.store.ts +++ b/src/renderer/components/dock/upgrade-chart.store.ts @@ -43,7 +43,6 @@ export class UpgradeChartStore extends DockTabStore { async init() { super.init(); - await releaseStore.loadFromContextNamespaces(); this.dispose.push( dockStore.onTabChange(({ tabId }) => this.loadData(tabId), { @@ -53,20 +52,17 @@ export class UpgradeChartStore extends DockTabStore { ); } - hasValues(tabId: TabId) { - return this.values.has(tabId); - } - async loadData(tabId: TabId) { await this.whenReady; - await Promise.all([ + return Promise.all([ + !releaseStore.isLoaded && releaseStore.loadFromContextNamespaces(), this.loadValues(tabId), this.loadVersions(tabId), ]); } - getRelease(tabId: TabId) { + getRelease(tabId: TabId): HelmRelease | null { const releaseName = this.getData(tabId)?.releaseName; if (!releaseName) return null; @@ -75,34 +71,44 @@ export class UpgradeChartStore extends DockTabStore { } @action - private async loadVersions(tabId: TabId) { + private async loadVersions(tabId: TabId): Promise { try { const { releaseName } = this.getData(tabId); - this.versions.clear(); + console.info(`[UPGRADE-CHART]: loading versions for release "${releaseName}"`); const versions = await helmChartStore.getVersions(releaseName); this.versions.replace(versions); + + return versions; } catch (error) { console.error(`[UPGRADE-CHART]: loading versions has failed: ${error}`); } + + return []; } @action - private async loadValues(tabId: TabId, { forceReload = false } = {}) { - if (this.hasValues(tabId) && !forceReload) { - return; + private async loadValues(tabId: TabId): Promise { + if (this.values.has(tabId)) { + return this.values.get(tabId); // use cached values } try { - this.values.delete(tabId); const { releaseName, releaseNamespace } = this.getData(tabId); + + console.info(`[UPGRADE-CHART]: loading values for release "${releaseName}"`); + const values = await getReleaseValues(releaseName, releaseNamespace, true); this.values.set(tabId, values); + + return values; } catch (error) { console.error(`[UPGRADE-CHART]: loading values has failed: ${error}`); } + + return ""; } getTabByRelease(releaseName: string): DockTab | null { diff --git a/src/renderer/components/dock/upgrade-chart.tsx b/src/renderer/components/dock/upgrade-chart.tsx index 5f219e2455..397c835084 100644 --- a/src/renderer/components/dock/upgrade-chart.tsx +++ b/src/renderer/components/dock/upgrade-chart.tsx @@ -42,8 +42,6 @@ export class UpgradeChart extends React.Component { makeObservable(this); } - @observable selectedVersion: IChartVersion; - get tabId() { return this.props.tabId; } @@ -52,22 +50,45 @@ export class UpgradeChart extends React.Component { return upgradeChartStore.getRelease(this.tabId); } - @computed get versions(): SelectOption[] { - return upgradeChartStore.versions.map(version => ({ value: version })); + @observable selectedVersion: IChartVersion | undefined; + + @computed get releaseVersion(): IChartVersion { + return this.getChartVersionByRelease(this.release); } - get value() { + @computed get chartVersionOptions(): SelectOption[] { + return upgradeChartStore.versions.map(version => ({ + value: version, + disabled: this.selectedVersion == this.releaseVersion, + })); + } + + @computed get chartValues(): string { return upgradeChartStore.values.get(this.tabId); } + getChartVersionByRelease(release: HelmRelease): IChartVersion | undefined { + return upgradeChartStore.versions.find(({ version, repo }) => ( + release?.getChart() == repo && + release?.getVersion() === version + )); + } + upgrade = async () => { - const { version, repo } = this.selectedVersion; - const releaseName = this.release.getName(); - const releaseNs = this.release.getNs(); + const { releaseVersion, selectedVersion, release, chartValues } = this; + const newVersionNotSelected = !selectedVersion || selectedVersion == releaseVersion; + + if (!release || newVersionNotSelected) { + throw new Error(`You have not selected new version for "${releaseVersion}"`); // skip: nothing to upgrade + } + + const { version, repo } = selectedVersion; + const releaseName = release.getName(); + const releaseNs = release.getNs(); await releaseStore.update(releaseName, releaseNs, { - chart: this.release.getChart(), - values: this.value, + chart: release.getChart(), + values: chartValues, repo, version, }); @@ -86,8 +107,7 @@ export class UpgradeChart extends React.Component { }; render() { - const { release, versions, selectedVersion } = this; - const currentVersion = release.getVersion(); + const { release, chartVersionOptions } = this; return ( { submittingMessage="Updating.." controls={
- Release - Namespace - Version + Release + Namespace + Version Upgrade version