1
0
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:
Sebastian Malton 2022-09-06 11:43:31 -04:00
parent dde628b027
commit 2a7788bcf9
7 changed files with 53 additions and 55 deletions

View File

@ -16,8 +16,7 @@ const navigateToHelmReleasesInjectable = getInjectable({
const navigateToRoute = di.inject(navigateToRouteInjectionToken);
const route = di.inject(helmReleasesRouteInjectable);
return (parameters) =>
navigateToRoute(route, { parameters });
return (parameters) => navigateToRoute(route, { parameters });
},
});

View File

@ -5388,8 +5388,7 @@ exports[`showing details for helm release given application is started when navi
<span
class="value"
>
NaNy
ago (some-updated)
NaNy ago (some-updated)
</span>
</div>
<div
@ -6613,8 +6612,7 @@ exports[`showing details for helm release given application is started when navi
<span
class="value"
>
NaNy
ago (some-updated)
NaNy ago (some-updated)
</span>
</div>
<div
@ -7838,8 +7836,7 @@ exports[`showing details for helm release given application is started when navi
<span
class="value"
>
NaNy
ago (some-updated)
NaNy ago (some-updated)
</span>
</div>
<div
@ -8890,8 +8887,7 @@ exports[`showing details for helm release given application is started when navi
<span
class="value"
>
NaNy
ago (some-updated)
NaNy ago (some-updated)
</span>
</div>
<div
@ -9942,8 +9938,7 @@ exports[`showing details for helm release given application is started when navi
<span
class="value"
>
NaNy
ago (some-updated)
NaNy ago (some-updated)
</span>
</div>
<div
@ -11169,8 +11164,7 @@ exports[`showing details for helm release given application is started when navi
<span
class="value"
>
NaNy
ago (some-updated)
NaNy ago (some-updated)
</span>
</div>
<div
@ -13273,7 +13267,9 @@ exports[`showing details for helm release given application is started when navi
<div
data-testid="helm-release-detail-error"
>
Failed to load release
Failed to load release:
some-error
</div>
</div>
</div>

View File

@ -6,12 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable";
import type { AsyncResult } from "../../../../../common/utils/async-result";
import execHelmInjectable from "../../../exec-helm/exec-helm.injectable";
import yaml from "js-yaml";
export interface HelmResourceManifest {
metadata: {
namespace: string;
};
}
import type { KubeJsonApiData } from "../../../../../common/k8s-api/kube-json-api";
const callForHelmManifestInjectable = getInjectable({
id: "call-for-helm-manifest",
@ -23,7 +18,7 @@ const callForHelmManifestInjectable = getInjectable({
name: string,
namespace: string,
kubeconfigPath: string,
): Promise<AsyncResult<HelmResourceManifest[]>> => {
): Promise<AsyncResult<KubeJsonApiData[]>> => {
const result = await execHelm(
"get",
"manifest",
@ -42,7 +37,7 @@ const callForHelmManifestInjectable = getInjectable({
callWasSuccessful: true,
response: yaml
.loadAll(result.response)
.filter((manifest) => !!manifest) as HelmResourceManifest[],
.filter((manifest) => !!manifest) as KubeJsonApiData[],
};
};

View File

@ -10,13 +10,13 @@ import execFileWithInputInjectable from "./exec-file-with-input/exec-file-with-i
import { getErrorMessage } from "../../../../../common/utils/get-error-message";
import { map } from "lodash/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 = (
namespace: string,
kubeconfigPath: string,
kubectlPath: string,
resourceManifests: HelmResourceManifest[]
resourceManifests: KubeJsonApiData[]
) => Promise<JsonObject[]>;
const callForKubeResourcesByManifestInjectable = getInjectable({

View File

@ -34,10 +34,16 @@ interface Dependencies {
}
const NonInjectedReleaseDetailsContent = observer(({ model }: Dependencies & ReleaseDetailsContentProps) => {
const failedToLoad = model.failedToLoad.get();
const loadingError = model.loadingError.get();
if (failedToLoad) {
return <div data-testid="helm-release-detail-error">Failed to load release</div>;
if (loadingError) {
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 name="Updated">
{model.release.getUpdated()}
{` ago (${model.release.updated})`}
{`${model.release.getUpdated()} ago (${model.release.updated})`}
</DrawerItem>
<DrawerItem name="Namespace">{model.release.getNs()}</DrawerItem>

View File

@ -21,19 +21,23 @@ interface ReleaseDetailsDrawerProps {
interface Dependencies {
model: ReleaseDetailsModel;
closeDrawer: () => void;
navigateToHelmReleases: () => void;
}
const NonInjectedReleaseDetailsDrawerToolbar = observer(
({ model, closeDrawer }: Dependencies & ReleaseDetailsDrawerProps) =>
model.failedToLoad.get() ? null : (
const NonInjectedReleaseDetailsDrawerToolbar = observer(({
model,
navigateToHelmReleases,
}: Dependencies & ReleaseDetailsDrawerProps) => (
model.loadingError.get()
? null
: (
<HelmReleaseMenu
release={model.release}
toolbar
hideDetails={closeDrawer}
hideDetails={navigateToHelmReleases}
/>
),
);
)
));
export const ReleaseDetailsDrawerToolbar = withInjectables<
Dependencies,
@ -43,7 +47,7 @@ export const ReleaseDetailsDrawerToolbar = withInjectables<
getProps: async (di, props) => ({
model: await di.inject(releaseDetailsModelInjectable, props.targetRelease),
closeDrawer: di.inject(navigateToHelmReleasesInjectable),
navigateToHelmReleases: di.inject(navigateToHelmReleasesInjectable),
...props,
}),
});

View File

@ -54,7 +54,7 @@ const releaseDetailsModelInjectable = getInjectable({
showCheckedErrorNotification,
showSuccessNotification,
createUpgradeChartTab,
closeDrawer: navigateToHelmReleases,
navigateToHelmReleases,
});
await model.load();
@ -63,47 +63,46 @@ const releaseDetailsModelInjectable = getInjectable({
},
lifecycle: lifecycleEnum.keyedSingleton({
getInstanceKey: (di, release: TargetHelmRelease) =>
`${release.namespace}/${release.name}`,
getInstanceKey: (di, release: TargetHelmRelease) => `${release.namespace}/${release.name}`,
}),
});
export default releaseDetailsModelInjectable;
export interface OnlyUserSuppliedValuesAreShownToggle {
value: IObservableValue<boolean>;
readonly value: IObservableValue<boolean>;
toggle: () => Promise<void>;
}
export interface ConfigurationInput {
nonSavedValue: IObservableValue<string>;
isLoading: IObservableValue<boolean>;
isSaving: IObservableValue<boolean>;
readonly nonSavedValue: IObservableValue<string>;
readonly isLoading: IObservableValue<boolean>;
readonly isSaving: IObservableValue<boolean>;
onChange: (value: string) => void;
save: () => Promise<void>;
}
interface Dependencies {
readonly targetRelease: TargetHelmRelease;
readonly activeTheme: IComputedValue<LensTheme>;
callForHelmRelease: CallForHelmRelease;
targetRelease: TargetHelmRelease;
activeTheme: IComputedValue<LensTheme>;
callForHelmReleaseConfiguration: CallForHelmReleaseConfiguration;
getResourceDetailsUrl: GetResourceDetailsUrl;
updateRelease: CallForHelmReleaseUpdate;
showCheckedErrorNotification: ShowCheckedErrorNotification;
showSuccessNotification: ShowNotification;
createUpgradeChartTab: (release: HelmRelease) => string;
closeDrawer: () => void;
navigateToHelmReleases: () => void;
}
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 = {
nonSavedValue: observable.box(""),
@ -179,7 +178,7 @@ export class ReleaseDetailsModel {
if (!result.callWasSuccessful) {
runInAction(() => {
this.failedToLoad.set(true);
this.loadingError.set(result.error);
});
return;
@ -257,13 +256,13 @@ export class ReleaseDetailsModel {
}
close = () => {
this.dependencies.closeDrawer();
this.dependencies.navigateToHelmReleases();
};
startUpgradeProcess = () => {
this.dependencies.createUpgradeChartTab(this.release);
this.dependencies.closeDrawer();
this.dependencies.navigateToHelmReleases();
};
}