diff --git a/src/renderer/components/+helm-releases/release-secrets.injectable.ts b/src/renderer/components/+helm-releases/release-secrets.injectable.ts new file mode 100644 index 0000000000..87fda2f181 --- /dev/null +++ b/src/renderer/components/+helm-releases/release-secrets.injectable.ts @@ -0,0 +1,37 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; +import { computed, onBecomeObserved, onBecomeUnobserved } from "mobx"; +import subscribeStoresInjectable from "../../kube-watch-api/subscribe-stores.injectable"; +import secretStoreInjectable from "../+config-secrets/store.injectable"; + +const releaseSecretsInjectable = getInjectable({ + id: "release-secrets", + + instantiate: (di) => { + const subscribeStores = di.inject(subscribeStoresInjectable); + const secretStore = di.inject(secretStoreInjectable); + + const releaseSecrets = computed(() => + secretStore.contextItems.filter((secret) => + secret.type.startsWith("helm.sh/release"), + ), + ); + + let unsubscribe: () => void; + + onBecomeObserved(releaseSecrets, () => { + unsubscribe = subscribeStores([secretStore]); + }); + + onBecomeUnobserved(releaseSecrets, () => { + unsubscribe?.(); + }); + + return releaseSecrets; + }, +}); + +export default releaseSecretsInjectable; diff --git a/src/renderer/components/+helm-releases/releases.injectable.ts b/src/renderer/components/+helm-releases/releases.injectable.ts index accedf3a30..e23640de6d 100644 --- a/src/renderer/components/+helm-releases/releases.injectable.ts +++ b/src/renderer/components/+helm-releases/releases.injectable.ts @@ -7,6 +7,7 @@ import { asyncComputed } from "@ogre-tools/injectable-react"; import namespaceStoreInjectable from "../+namespaces/store.injectable"; import { listReleases } from "../../../common/k8s-api/endpoints/helm-releases.api"; import clusterFrameContextInjectable from "../../cluster-frame-context/cluster-frame-context.injectable"; +import releaseSecretsInjectable from "./release-secrets.injectable"; const releasesInjectable = getInjectable({ id: "releases", @@ -14,10 +15,13 @@ const releasesInjectable = getInjectable({ instantiate: (di) => { const clusterContext = di.inject(clusterFrameContextInjectable); const namespaceStore = di.inject(namespaceStoreInjectable); + const releaseSecrets = di.inject(releaseSecretsInjectable); return asyncComputed(async () => { const contextNamespaces = namespaceStore.contextNamespaces || []; + void releaseSecrets.get(); + const isLoadingAll = clusterContext.allNamespaces?.length > 1 && clusterContext.cluster?.accessibleNamespaces.length === 0 &&