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

fixes / responding to comments

Signed-off-by: Roman <ixrock@gmail.com>
This commit is contained in:
Roman 2021-10-13 09:59:54 +03:00
parent e966c1149d
commit bfacb86438
8 changed files with 70 additions and 39 deletions

View File

@ -363,11 +363,7 @@ utils.describeIf(minikubeReady(TEST_NAMESPACE))("Minikube based tests", () => {
await kubeApiServerRow.click(); await kubeApiServerRow.click();
await frame.waitForSelector(".Drawer", { state: "visible" }); await frame.waitForSelector(".Drawer", { state: "visible" });
await frame.waitForSelector(".Drawer .drawer-title .Icon >> text=subject").then(button => button.click());
const podLogsIcon = await frame.waitForSelector(".Drawer .drawer-title .Icon >> text=subject");
await podLogsIcon.click();
await frame.waitForSelector(".Dock.isOpen"); await frame.waitForSelector(".Dock.isOpen");
// Check if controls are available // Check if controls are available

View File

@ -319,4 +319,5 @@ export const DESCRIPTORS = {
export const CONSTANTS = { export const CONSTANTS = {
defaultUpdateChannel, defaultUpdateChannel,
updateChannels, updateChannels,
defaultEditorConfig,
}; };

View File

@ -29,7 +29,7 @@ import { kubeConfigDefaultPath } from "../kube-helpers";
import { appEventBus } from "../event-bus"; import { appEventBus } from "../event-bus";
import path from "path"; import path from "path";
import { ObservableToggleSet, toJS } from "../../renderer/utils"; 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 logger from "../../main/logger";
import { getPath } from "../utils/getPath"; import { getPath } from "../utils/getPath";
@ -90,7 +90,7 @@ export class UserStore extends BaseStore<UserStoreModel> /* implements UserStore
/** /**
* Monaco editor configs * Monaco editor configs
*/ */
@observable editorConfiguration: EditorConfiguration = defaultEditorConfig; @observable editorConfiguration: EditorConfiguration = CONSTANTS.defaultEditorConfig;
/** /**
* The set of file/folder paths to be synced * The set of file/folder paths to be synced

View File

@ -21,7 +21,7 @@
export * from "./dock"; export * from "./dock";
// registered dock-tab view components // Registered React components to handle contents per {DockTab.kind}
export * from "./terminal-window"; export * from "./terminal-window";
export * from "./create-resource"; export * from "./create-resource";
export * from "./edit-resource"; export * from "./edit-resource";

View File

@ -33,5 +33,13 @@
.InstallChartDone { .InstallChartDone {
--flex-gap: #{$padding * 1.5}; --flex-gap: #{$padding * 1.5};
position: absolute;
left: 0;
top: 0;
right: 0;
bottom: 0;
z-index: 1;
background: black;
padding: $padding * 2; padding: $padding * 2;
} }

View File

@ -51,7 +51,7 @@ export class TerminalWindow extends React.Component<Props> {
]); ]);
} }
activate(tabId: TabId = dockStore.selectedTabId) { activate(tabId: TabId) {
if (this.terminal) this.terminal.detach(); // detach previous if (this.terminal) this.terminal.detach(); // detach previous
this.terminal = TerminalStore.getInstance().getTerminal(tabId); this.terminal = TerminalStore.getInstance().getTerminal(tabId);
this.terminal.attachTo(this.elem); this.terminal.attachTo(this.elem);

View File

@ -43,7 +43,6 @@ export class UpgradeChartStore extends DockTabStore<IChartUpgradeData> {
async init() { async init() {
super.init(); super.init();
await releaseStore.loadFromContextNamespaces();
this.dispose.push( this.dispose.push(
dockStore.onTabChange(({ tabId }) => this.loadData(tabId), { dockStore.onTabChange(({ tabId }) => this.loadData(tabId), {
@ -53,20 +52,17 @@ export class UpgradeChartStore extends DockTabStore<IChartUpgradeData> {
); );
} }
hasValues(tabId: TabId) {
return this.values.has(tabId);
}
async loadData(tabId: TabId) { async loadData(tabId: TabId) {
await this.whenReady; await this.whenReady;
await Promise.all([ return Promise.all([
!releaseStore.isLoaded && releaseStore.loadFromContextNamespaces(),
this.loadValues(tabId), this.loadValues(tabId),
this.loadVersions(tabId), this.loadVersions(tabId),
]); ]);
} }
getRelease(tabId: TabId) { getRelease(tabId: TabId): HelmRelease | null {
const releaseName = this.getData(tabId)?.releaseName; const releaseName = this.getData(tabId)?.releaseName;
if (!releaseName) return null; if (!releaseName) return null;
@ -75,34 +71,44 @@ export class UpgradeChartStore extends DockTabStore<IChartUpgradeData> {
} }
@action @action
private async loadVersions(tabId: TabId) { private async loadVersions(tabId: TabId): Promise<IChartVersion[]> {
try { try {
const { releaseName } = this.getData(tabId); const { releaseName } = this.getData(tabId);
this.versions.clear(); console.info(`[UPGRADE-CHART]: loading versions for release "${releaseName}"`);
const versions = await helmChartStore.getVersions(releaseName); const versions = await helmChartStore.getVersions(releaseName);
this.versions.replace(versions); this.versions.replace(versions);
return versions;
} catch (error) { } catch (error) {
console.error(`[UPGRADE-CHART]: loading versions has failed: ${error}`); console.error(`[UPGRADE-CHART]: loading versions has failed: ${error}`);
} }
return [];
} }
@action @action
private async loadValues(tabId: TabId, { forceReload = false } = {}) { private async loadValues(tabId: TabId): Promise<string> {
if (this.hasValues(tabId) && !forceReload) { if (this.values.has(tabId)) {
return; return this.values.get(tabId); // use cached values
} }
try { try {
this.values.delete(tabId);
const { releaseName, releaseNamespace } = this.getData(tabId); const { releaseName, releaseNamespace } = this.getData(tabId);
console.info(`[UPGRADE-CHART]: loading values for release "${releaseName}"`);
const values = await getReleaseValues(releaseName, releaseNamespace, true); const values = await getReleaseValues(releaseName, releaseNamespace, true);
this.values.set(tabId, values); this.values.set(tabId, values);
return values;
} catch (error) { } catch (error) {
console.error(`[UPGRADE-CHART]: loading values has failed: ${error}`); console.error(`[UPGRADE-CHART]: loading values has failed: ${error}`);
} }
return "";
} }
getTabByRelease(releaseName: string): DockTab | null { getTabByRelease(releaseName: string): DockTab | null {

View File

@ -42,8 +42,6 @@ export class UpgradeChart extends React.Component<Props> {
makeObservable(this); makeObservable(this);
} }
@observable selectedVersion: IChartVersion;
get tabId() { get tabId() {
return this.props.tabId; return this.props.tabId;
} }
@ -52,22 +50,45 @@ export class UpgradeChart extends React.Component<Props> {
return upgradeChartStore.getRelease(this.tabId); return upgradeChartStore.getRelease(this.tabId);
} }
@computed get versions(): SelectOption<IChartVersion>[] { @observable selectedVersion: IChartVersion | undefined;
return upgradeChartStore.versions.map(version => ({ value: version }));
@computed get releaseVersion(): IChartVersion {
return this.getChartVersionByRelease(this.release);
} }
get value() { @computed get chartVersionOptions(): SelectOption<IChartVersion>[] {
return upgradeChartStore.versions.map(version => ({
value: version,
disabled: this.selectedVersion == this.releaseVersion,
}));
}
@computed get chartValues(): string {
return upgradeChartStore.values.get(this.tabId); 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 () => { upgrade = async () => {
const { version, repo } = this.selectedVersion; const { releaseVersion, selectedVersion, release, chartValues } = this;
const releaseName = this.release.getName(); const newVersionNotSelected = !selectedVersion || selectedVersion == releaseVersion;
const releaseNs = this.release.getNs();
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, { await releaseStore.update(releaseName, releaseNs, {
chart: this.release.getChart(), chart: release.getChart(),
values: this.value, values: chartValues,
repo, version, repo, version,
}); });
@ -86,8 +107,7 @@ export class UpgradeChart extends React.Component<Props> {
}; };
render() { render() {
const { release, versions, selectedVersion } = this; const { release, chartVersionOptions } = this;
const currentVersion = release.getVersion();
return ( return (
<InfoPanel <InfoPanel
@ -97,16 +117,16 @@ export class UpgradeChart extends React.Component<Props> {
submittingMessage="Updating.." submittingMessage="Updating.."
controls={ controls={
<div className="upgrade flex gaps align-center"> <div className="upgrade flex gaps align-center">
<span>Release</span> <Badge label={release.getName()}/> <span>Release</span> <Badge label={release?.getName()}/>
<span>Namespace</span> <Badge label={release.getNs()}/> <span>Namespace</span> <Badge label={release?.getNs()}/>
<span>Version</span> <Badge label={currentVersion}/> <span>Version</span> <Badge label={release?.getVersion()}/>
<span>Upgrade version</span> <span>Upgrade version</span>
<Select <Select
className="chart-version" className="chart-version"
menuPlacement="top" menuPlacement="top"
themeName="outlined" themeName="outlined"
value={selectedVersion ?? versions[0]} value={this.selectedVersion ?? this.releaseVersion}
options={versions} options={chartVersionOptions}
formatOptionLabel={this.formatVersionLabel} formatOptionLabel={this.formatVersionLabel}
onChange={({ value }: SelectOption<IChartVersion>) => this.selectedVersion = value} onChange={({ value }: SelectOption<IChartVersion>) => this.selectedVersion = value}
/> />