diff --git a/packages/core/src/renderer/components/+helm-releases/release-details/release-details-content.tsx b/packages/core/src/renderer/components/+helm-releases/release-details/release-details-content.tsx index ebfb51c6ef..34de1b4128 100644 --- a/packages/core/src/renderer/components/+helm-releases/release-details/release-details-content.tsx +++ b/packages/core/src/renderer/components/+helm-releases/release-details/release-details-content.tsx @@ -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; } -const NonInjectedReleaseDetailsContent = observer(({ model }: Dependencies & ReleaseDetailsContentProps) => { +const NonInjectedReleaseDetailsContent = observer(({ computedModel }: Dependencies & ReleaseDetailsContentProps) => { + const model = computedModel.value.get(); + + if (!model) { + return ; + } + const loadingError = model.loadingError.get(); if (loadingError) { @@ -110,11 +117,9 @@ const NonInjectedReleaseDetailsContent = observer(({ model }: Dependencies & Rel }); export const ReleaseDetailsContent = withInjectables(NonInjectedReleaseDetailsContent, { - getPlaceholder: () => , - - getProps: async (di, props) => ({ - model: await di.inject(releaseDetailsModelInjectable, props.targetRelease), + getProps: (di, props) => ({ ...props, + computedModel: di.inject(releaseDetailsModelInjectable, props.targetRelease), }), }); diff --git a/packages/core/src/renderer/components/+helm-releases/release-details/release-details-model/release-details-model.injectable.tsx b/packages/core/src/renderer/components/+helm-releases/release-details/release-details-model/release-details-model.injectable.tsx index 80df7a323c..3645d0301e 100644 --- a/packages/core/src/renderer/components/+helm-releases/release-details/release-details-model/release-details-model.injectable.tsx +++ b/packages/core/src/renderer/components/+helm-releases/release-details/release-details-model/release-details-model.injectable.tsx @@ -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({