diff --git a/src/renderer/api/kube-watch-api.ts b/src/renderer/api/kube-watch-api.ts index fb9dc11444..b467085c39 100644 --- a/src/renderer/api/kube-watch-api.ts +++ b/src/renderer/api/kube-watch-api.ts @@ -116,7 +116,7 @@ export class KubeWatchApi { } isAllowedApi(api: KubeApi): boolean { - return !!this.cluster?.isAllowedResource(api.kind); + return !!this?.cluster?.isAllowedResource(api.kind); } subscribeApi(api: KubeApi | KubeApi[]): () => void { @@ -142,8 +142,14 @@ export class KubeWatchApi { const limitRequests = plimit(1); // load stores one by one to allow quick skipping when fast clicking btw pages const preloading: Promise[] = []; const apis = new Set(stores.map(store => store.getSubscribeApis()).flat()); + const unsubscribeList: (() => void)[] = []; let isUnsubscribed = false; + const subscribe = () => { + if (isUnsubscribed) return; + apis.forEach(api => unsubscribeList.push(this.subscribeApi(api))); + }; + if (preload) { for (const store of stores) { preloading.push(limitRequests(async () => { @@ -154,35 +160,24 @@ export class KubeWatchApi { } } - const subscribe = () => { - const unsubscribeList: (() => void)[] = []; - - const subscribeApis = () => { - if (isUnsubscribed) return; - apis.forEach(api => unsubscribeList.push(this.subscribeApi(api))); - }; - - if (waitUntilLoaded) { - Promise.all(preloading).then(subscribeApis, error => { - this.log({ - message: new Error("Loading stores has failed"), - meta: { stores, error, options }, - }); + if (waitUntilLoaded) { + Promise.all(preloading).then(subscribe, error => { + this.log({ + message: new Error("Loading stores has failed"), + meta: { stores, error, options }, }); - } else { - subscribeApis(); - } + }); + } else { + subscribe(); + } - // unsubscribe - return () => { - if (isUnsubscribed) return; - isUnsubscribed = true; - limitRequests.clearQueue(); - unsubscribeList.forEach(unsubscribe => unsubscribe()); - }; + // unsubscribe + return () => { + if (isUnsubscribed) return; + isUnsubscribed = true; + limitRequests.clearQueue(); + unsubscribeList.forEach(unsubscribe => unsubscribe()); }; - - return subscribe(); } protected async connectionCheck() {