mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Cleanup and show error message
Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
parent
dde628b027
commit
2a7788bcf9
@ -16,8 +16,7 @@ const navigateToHelmReleasesInjectable = getInjectable({
|
|||||||
const navigateToRoute = di.inject(navigateToRouteInjectionToken);
|
const navigateToRoute = di.inject(navigateToRouteInjectionToken);
|
||||||
const route = di.inject(helmReleasesRouteInjectable);
|
const route = di.inject(helmReleasesRouteInjectable);
|
||||||
|
|
||||||
return (parameters) =>
|
return (parameters) => navigateToRoute(route, { parameters });
|
||||||
navigateToRoute(route, { parameters });
|
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -5388,8 +5388,7 @@ exports[`showing details for helm release given application is started when navi
|
|||||||
<span
|
<span
|
||||||
class="value"
|
class="value"
|
||||||
>
|
>
|
||||||
NaNy
|
NaNy ago (some-updated)
|
||||||
ago (some-updated)
|
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
@ -6613,8 +6612,7 @@ exports[`showing details for helm release given application is started when navi
|
|||||||
<span
|
<span
|
||||||
class="value"
|
class="value"
|
||||||
>
|
>
|
||||||
NaNy
|
NaNy ago (some-updated)
|
||||||
ago (some-updated)
|
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
@ -7838,8 +7836,7 @@ exports[`showing details for helm release given application is started when navi
|
|||||||
<span
|
<span
|
||||||
class="value"
|
class="value"
|
||||||
>
|
>
|
||||||
NaNy
|
NaNy ago (some-updated)
|
||||||
ago (some-updated)
|
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
@ -8890,8 +8887,7 @@ exports[`showing details for helm release given application is started when navi
|
|||||||
<span
|
<span
|
||||||
class="value"
|
class="value"
|
||||||
>
|
>
|
||||||
NaNy
|
NaNy ago (some-updated)
|
||||||
ago (some-updated)
|
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
@ -9942,8 +9938,7 @@ exports[`showing details for helm release given application is started when navi
|
|||||||
<span
|
<span
|
||||||
class="value"
|
class="value"
|
||||||
>
|
>
|
||||||
NaNy
|
NaNy ago (some-updated)
|
||||||
ago (some-updated)
|
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
@ -11169,8 +11164,7 @@ exports[`showing details for helm release given application is started when navi
|
|||||||
<span
|
<span
|
||||||
class="value"
|
class="value"
|
||||||
>
|
>
|
||||||
NaNy
|
NaNy ago (some-updated)
|
||||||
ago (some-updated)
|
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
@ -13273,7 +13267,9 @@ exports[`showing details for helm release given application is started when navi
|
|||||||
<div
|
<div
|
||||||
data-testid="helm-release-detail-error"
|
data-testid="helm-release-detail-error"
|
||||||
>
|
>
|
||||||
Failed to load release
|
Failed to load release:
|
||||||
|
|
||||||
|
some-error
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -6,12 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable";
|
|||||||
import type { AsyncResult } from "../../../../../common/utils/async-result";
|
import type { AsyncResult } from "../../../../../common/utils/async-result";
|
||||||
import execHelmInjectable from "../../../exec-helm/exec-helm.injectable";
|
import execHelmInjectable from "../../../exec-helm/exec-helm.injectable";
|
||||||
import yaml from "js-yaml";
|
import yaml from "js-yaml";
|
||||||
|
import type { KubeJsonApiData } from "../../../../../common/k8s-api/kube-json-api";
|
||||||
export interface HelmResourceManifest {
|
|
||||||
metadata: {
|
|
||||||
namespace: string;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
const callForHelmManifestInjectable = getInjectable({
|
const callForHelmManifestInjectable = getInjectable({
|
||||||
id: "call-for-helm-manifest",
|
id: "call-for-helm-manifest",
|
||||||
@ -23,7 +18,7 @@ const callForHelmManifestInjectable = getInjectable({
|
|||||||
name: string,
|
name: string,
|
||||||
namespace: string,
|
namespace: string,
|
||||||
kubeconfigPath: string,
|
kubeconfigPath: string,
|
||||||
): Promise<AsyncResult<HelmResourceManifest[]>> => {
|
): Promise<AsyncResult<KubeJsonApiData[]>> => {
|
||||||
const result = await execHelm(
|
const result = await execHelm(
|
||||||
"get",
|
"get",
|
||||||
"manifest",
|
"manifest",
|
||||||
@ -42,7 +37,7 @@ const callForHelmManifestInjectable = getInjectable({
|
|||||||
callWasSuccessful: true,
|
callWasSuccessful: true,
|
||||||
response: yaml
|
response: yaml
|
||||||
.loadAll(result.response)
|
.loadAll(result.response)
|
||||||
.filter((manifest) => !!manifest) as HelmResourceManifest[],
|
.filter((manifest) => !!manifest) as KubeJsonApiData[],
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10,13 +10,13 @@ import execFileWithInputInjectable from "./exec-file-with-input/exec-file-with-i
|
|||||||
import { getErrorMessage } from "../../../../../common/utils/get-error-message";
|
import { getErrorMessage } from "../../../../../common/utils/get-error-message";
|
||||||
import { map } from "lodash/fp";
|
import { map } from "lodash/fp";
|
||||||
import { pipeline } from "@ogre-tools/fp";
|
import { pipeline } from "@ogre-tools/fp";
|
||||||
import type { HelmResourceManifest } from "../call-for-helm-manifest/call-for-helm-manifest.injectable";
|
import type { KubeJsonApiData } from "../../../../../common/k8s-api/kube-json-api";
|
||||||
|
|
||||||
export type CallForKubeResourcesByManifest = (
|
export type CallForKubeResourcesByManifest = (
|
||||||
namespace: string,
|
namespace: string,
|
||||||
kubeconfigPath: string,
|
kubeconfigPath: string,
|
||||||
kubectlPath: string,
|
kubectlPath: string,
|
||||||
resourceManifests: HelmResourceManifest[]
|
resourceManifests: KubeJsonApiData[]
|
||||||
) => Promise<JsonObject[]>;
|
) => Promise<JsonObject[]>;
|
||||||
|
|
||||||
const callForKubeResourcesByManifestInjectable = getInjectable({
|
const callForKubeResourcesByManifestInjectable = getInjectable({
|
||||||
|
|||||||
@ -34,10 +34,16 @@ interface Dependencies {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const NonInjectedReleaseDetailsContent = observer(({ model }: Dependencies & ReleaseDetailsContentProps) => {
|
const NonInjectedReleaseDetailsContent = observer(({ model }: Dependencies & ReleaseDetailsContentProps) => {
|
||||||
const failedToLoad = model.failedToLoad.get();
|
const loadingError = model.loadingError.get();
|
||||||
|
|
||||||
if (failedToLoad) {
|
if (loadingError) {
|
||||||
return <div data-testid="helm-release-detail-error">Failed to load release</div>;
|
return (
|
||||||
|
<div data-testid="helm-release-detail-error">
|
||||||
|
Failed to load release:
|
||||||
|
{" "}
|
||||||
|
{loadingError}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -58,8 +64,7 @@ const NonInjectedReleaseDetailsContent = observer(({ model }: Dependencies & Rel
|
|||||||
</DrawerItem>
|
</DrawerItem>
|
||||||
|
|
||||||
<DrawerItem name="Updated">
|
<DrawerItem name="Updated">
|
||||||
{model.release.getUpdated()}
|
{`${model.release.getUpdated()} ago (${model.release.updated})`}
|
||||||
{` ago (${model.release.updated})`}
|
|
||||||
</DrawerItem>
|
</DrawerItem>
|
||||||
|
|
||||||
<DrawerItem name="Namespace">{model.release.getNs()}</DrawerItem>
|
<DrawerItem name="Namespace">{model.release.getNs()}</DrawerItem>
|
||||||
|
|||||||
@ -21,19 +21,23 @@ interface ReleaseDetailsDrawerProps {
|
|||||||
|
|
||||||
interface Dependencies {
|
interface Dependencies {
|
||||||
model: ReleaseDetailsModel;
|
model: ReleaseDetailsModel;
|
||||||
closeDrawer: () => void;
|
navigateToHelmReleases: () => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
const NonInjectedReleaseDetailsDrawerToolbar = observer(
|
const NonInjectedReleaseDetailsDrawerToolbar = observer(({
|
||||||
({ model, closeDrawer }: Dependencies & ReleaseDetailsDrawerProps) =>
|
model,
|
||||||
model.failedToLoad.get() ? null : (
|
navigateToHelmReleases,
|
||||||
|
}: Dependencies & ReleaseDetailsDrawerProps) => (
|
||||||
|
model.loadingError.get()
|
||||||
|
? null
|
||||||
|
: (
|
||||||
<HelmReleaseMenu
|
<HelmReleaseMenu
|
||||||
release={model.release}
|
release={model.release}
|
||||||
toolbar
|
toolbar
|
||||||
hideDetails={closeDrawer}
|
hideDetails={navigateToHelmReleases}
|
||||||
/>
|
/>
|
||||||
),
|
)
|
||||||
);
|
));
|
||||||
|
|
||||||
export const ReleaseDetailsDrawerToolbar = withInjectables<
|
export const ReleaseDetailsDrawerToolbar = withInjectables<
|
||||||
Dependencies,
|
Dependencies,
|
||||||
@ -43,7 +47,7 @@ export const ReleaseDetailsDrawerToolbar = withInjectables<
|
|||||||
|
|
||||||
getProps: async (di, props) => ({
|
getProps: async (di, props) => ({
|
||||||
model: await di.inject(releaseDetailsModelInjectable, props.targetRelease),
|
model: await di.inject(releaseDetailsModelInjectable, props.targetRelease),
|
||||||
closeDrawer: di.inject(navigateToHelmReleasesInjectable),
|
navigateToHelmReleases: di.inject(navigateToHelmReleasesInjectable),
|
||||||
...props,
|
...props,
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
|
|||||||
@ -54,7 +54,7 @@ const releaseDetailsModelInjectable = getInjectable({
|
|||||||
showCheckedErrorNotification,
|
showCheckedErrorNotification,
|
||||||
showSuccessNotification,
|
showSuccessNotification,
|
||||||
createUpgradeChartTab,
|
createUpgradeChartTab,
|
||||||
closeDrawer: navigateToHelmReleases,
|
navigateToHelmReleases,
|
||||||
});
|
});
|
||||||
|
|
||||||
await model.load();
|
await model.load();
|
||||||
@ -63,47 +63,46 @@ const releaseDetailsModelInjectable = getInjectable({
|
|||||||
},
|
},
|
||||||
|
|
||||||
lifecycle: lifecycleEnum.keyedSingleton({
|
lifecycle: lifecycleEnum.keyedSingleton({
|
||||||
getInstanceKey: (di, release: TargetHelmRelease) =>
|
getInstanceKey: (di, release: TargetHelmRelease) => `${release.namespace}/${release.name}`,
|
||||||
`${release.namespace}/${release.name}`,
|
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
|
|
||||||
export default releaseDetailsModelInjectable;
|
export default releaseDetailsModelInjectable;
|
||||||
|
|
||||||
export interface OnlyUserSuppliedValuesAreShownToggle {
|
export interface OnlyUserSuppliedValuesAreShownToggle {
|
||||||
value: IObservableValue<boolean>;
|
readonly value: IObservableValue<boolean>;
|
||||||
toggle: () => Promise<void>;
|
toggle: () => Promise<void>;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ConfigurationInput {
|
export interface ConfigurationInput {
|
||||||
nonSavedValue: IObservableValue<string>;
|
readonly nonSavedValue: IObservableValue<string>;
|
||||||
isLoading: IObservableValue<boolean>;
|
readonly isLoading: IObservableValue<boolean>;
|
||||||
isSaving: IObservableValue<boolean>;
|
readonly isSaving: IObservableValue<boolean>;
|
||||||
onChange: (value: string) => void;
|
onChange: (value: string) => void;
|
||||||
save: () => Promise<void>;
|
save: () => Promise<void>;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface Dependencies {
|
interface Dependencies {
|
||||||
|
readonly targetRelease: TargetHelmRelease;
|
||||||
|
readonly activeTheme: IComputedValue<LensTheme>;
|
||||||
callForHelmRelease: CallForHelmRelease;
|
callForHelmRelease: CallForHelmRelease;
|
||||||
targetRelease: TargetHelmRelease;
|
|
||||||
activeTheme: IComputedValue<LensTheme>;
|
|
||||||
callForHelmReleaseConfiguration: CallForHelmReleaseConfiguration;
|
callForHelmReleaseConfiguration: CallForHelmReleaseConfiguration;
|
||||||
getResourceDetailsUrl: GetResourceDetailsUrl;
|
getResourceDetailsUrl: GetResourceDetailsUrl;
|
||||||
updateRelease: CallForHelmReleaseUpdate;
|
updateRelease: CallForHelmReleaseUpdate;
|
||||||
showCheckedErrorNotification: ShowCheckedErrorNotification;
|
showCheckedErrorNotification: ShowCheckedErrorNotification;
|
||||||
showSuccessNotification: ShowNotification;
|
showSuccessNotification: ShowNotification;
|
||||||
createUpgradeChartTab: (release: HelmRelease) => string;
|
createUpgradeChartTab: (release: HelmRelease) => string;
|
||||||
closeDrawer: () => void;
|
navigateToHelmReleases: () => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
export class ReleaseDetailsModel {
|
export class ReleaseDetailsModel {
|
||||||
id = `${this.dependencies.targetRelease.namespace}/${this.dependencies.targetRelease.name}`;
|
readonly id = `${this.dependencies.targetRelease.namespace}/${this.dependencies.targetRelease.name}`;
|
||||||
|
|
||||||
constructor(private dependencies: Dependencies) {}
|
constructor(private readonly dependencies: Dependencies) {}
|
||||||
|
|
||||||
private detailedRelease = observable.box<DetailedHelmRelease | undefined>();
|
private readonly detailedRelease = observable.box<DetailedHelmRelease | undefined>();
|
||||||
|
|
||||||
readonly failedToLoad = observable.box(false);
|
readonly loadingError = observable.box<string>();
|
||||||
|
|
||||||
readonly configuration: ConfigurationInput = {
|
readonly configuration: ConfigurationInput = {
|
||||||
nonSavedValue: observable.box(""),
|
nonSavedValue: observable.box(""),
|
||||||
@ -179,7 +178,7 @@ export class ReleaseDetailsModel {
|
|||||||
|
|
||||||
if (!result.callWasSuccessful) {
|
if (!result.callWasSuccessful) {
|
||||||
runInAction(() => {
|
runInAction(() => {
|
||||||
this.failedToLoad.set(true);
|
this.loadingError.set(result.error);
|
||||||
});
|
});
|
||||||
|
|
||||||
return;
|
return;
|
||||||
@ -257,13 +256,13 @@ export class ReleaseDetailsModel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
close = () => {
|
close = () => {
|
||||||
this.dependencies.closeDrawer();
|
this.dependencies.navigateToHelmReleases();
|
||||||
};
|
};
|
||||||
|
|
||||||
startUpgradeProcess = () => {
|
startUpgradeProcess = () => {
|
||||||
this.dependencies.createUpgradeChartTab(this.release);
|
this.dependencies.createUpgradeChartTab(this.release);
|
||||||
|
|
||||||
this.dependencies.closeDrawer();
|
this.dependencies.navigateToHelmReleases();
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user