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

Fix helm release data being stale after reopening details

Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
Sebastian Malton 2023-02-21 12:39:09 -05:00
parent df1b947870
commit 221570503b
2 changed files with 20 additions and 9 deletions

View File

@ -11,6 +11,7 @@ import { Link } from "react-router-dom";
import { DrawerItem, DrawerTitle } from "../../drawer";
import { stopPropagation } from "../../../utils";
import { observer } from "mobx-react";
import type { IAsyncComputed } from "@ogre-tools/injectable-react";
import { withInjectables } from "@ogre-tools/injectable-react";
import type { ConfigurationInput, MinimalResourceGroup, OnlyUserSuppliedValuesAreShownToggle, ReleaseDetailsModel } from "./release-details-model/release-details-model.injectable";
import releaseDetailsModelInjectable from "./release-details-model/release-details-model.injectable";
@ -29,10 +30,16 @@ interface ReleaseDetailsContentProps {
}
interface Dependencies {
model: ReleaseDetailsModel;
computedModel: IAsyncComputed<ReleaseDetailsModel>;
}
const NonInjectedReleaseDetailsContent = observer(({ model }: Dependencies & ReleaseDetailsContentProps) => {
const NonInjectedReleaseDetailsContent = observer(({ computedModel }: Dependencies & ReleaseDetailsContentProps) => {
const model = computedModel.value.get();
if (!model) {
return <Spinner center data-testid="helm-release-detail-content-spinner" />;
}
const loadingError = model.loadingError.get();
if (loadingError) {
@ -110,11 +117,9 @@ const NonInjectedReleaseDetailsContent = observer(({ model }: Dependencies & Rel
});
export const ReleaseDetailsContent = withInjectables<Dependencies, ReleaseDetailsContentProps>(NonInjectedReleaseDetailsContent, {
getPlaceholder: () => <Spinner center data-testid="helm-release-detail-content-spinner" />,
getProps: async (di, props) => ({
model: await di.inject(releaseDetailsModelInjectable, props.targetRelease),
getProps: (di, props) => ({
...props,
computedModel: di.inject(releaseDetailsModelInjectable, props.targetRelease),
}),
});

View File

@ -31,11 +31,12 @@ import assert from "assert";
import activeThemeInjectable from "../../../../themes/active.injectable";
import type { ToHelmRelease } from "../../to-helm-release.injectable";
import toHelmReleaseInjectable from "../../to-helm-release.injectable";
import { asyncComputed } from "@ogre-tools/injectable-react";
const releaseDetailsModelInjectable = getInjectable({
id: "release-details-model",
instantiate: async (di, targetRelease: TargetHelmRelease) => {
instantiate: (di, targetRelease: TargetHelmRelease) => {
const model = new ReleaseDetailsModel({
requestDetailedHelmRelease: di.inject(requestDetailedHelmReleaseInjectable),
targetRelease,
@ -50,9 +51,14 @@ const releaseDetailsModelInjectable = getInjectable({
toHelmRelease: di.inject(toHelmReleaseInjectable),
});
await model.load();
return asyncComputed({
getValueFromObservedPromise: async () => {
await model.load();
return model;
return model;
},
betweenUpdates: "show-latest-value",
});
},
lifecycle: lifecycleEnum.keyedSingleton({