From e55a02ef2445ea0e08b1be624c6bc7d9087b7834 Mon Sep 17 00:00:00 2001 From: Jari Kolehmainen Date: Fri, 5 Feb 2021 09:45:11 +0200 Subject: [PATCH] Revert "KubeObjectStore & KubeWatchApi fixes and optimizations (#2063)" This reverts commit 5287e7e528fc6a946634d0fdf111f4b704a720d6. Signed-off-by: Jari Kolehmainen --- src/main/__test__/cluster.test.ts | 1 - src/main/cluster.ts | 40 +----- src/renderer/api/kube-watch-api.ts | 129 +++++++----------- .../+apps-releases/release.store.ts | 14 +- .../+custom-resources/crd-resources.tsx | 2 +- .../components/+events/kube-event-details.tsx | 2 +- .../+namespaces/namespace-details.tsx | 4 +- .../components/+namespaces/namespace.store.ts | 2 +- .../components/+nodes/node-details.tsx | 4 +- .../add-role-binding-dialog.tsx | 2 +- .../+workloads-cronjobs/cronjob-details.tsx | 4 +- .../daemonset-details.tsx | 4 +- .../deployment-details.tsx | 4 +- .../+workloads-jobs/job-details.tsx | 4 +- .../replicaset-details.tsx | 4 +- .../statefulset-details.tsx | 4 +- src/renderer/components/app.tsx | 9 +- .../components/dock/upgrade-chart.store.ts | 2 +- .../item-object-list/item-list-layout.tsx | 2 +- src/renderer/components/layout/sidebar.tsx | 4 +- src/renderer/kube-object.store.ts | 15 +- 21 files changed, 101 insertions(+), 155 deletions(-) diff --git a/src/main/__test__/cluster.test.ts b/src/main/__test__/cluster.test.ts index 4b11a19879..b3f0442cc2 100644 --- a/src/main/__test__/cluster.test.ts +++ b/src/main/__test__/cluster.test.ts @@ -126,7 +126,6 @@ describe("create clusters", () => { }; jest.spyOn(Cluster.prototype, "isClusterAdmin").mockReturnValue(Promise.resolve(true)); - jest.spyOn(Cluster.prototype, "canUseWatchApi").mockReturnValue(Promise.resolve(true)); jest.spyOn(Cluster.prototype, "canI") .mockImplementation((attr: V1ResourceAttributes): Promise => { expect(attr.namespace).toBe("default"); diff --git a/src/main/cluster.ts b/src/main/cluster.ts index cd92ab2650..956164e10c 100644 --- a/src/main/cluster.ts +++ b/src/main/cluster.ts @@ -48,7 +48,6 @@ export interface ClusterState { isAdmin: boolean; allowedNamespaces: string[] allowedResources: string[] - isGlobalWatchEnabled: boolean; } /** @@ -92,6 +91,7 @@ export class Cluster implements ClusterModel, ClusterState { */ @observable initializing = false; + /** * Is cluster object initialized * @@ -177,12 +177,6 @@ export class Cluster implements ClusterModel, ClusterState { * @observable */ @observable isAdmin = false; - /** - * Global watch-api accessibility , e.g. "/api/v1/services?watch=1" - * - * @observable - */ - @observable isGlobalWatchEnabled = false; /** * Preferences * @@ -359,7 +353,9 @@ export class Cluster implements ClusterModel, ClusterState { await this.refreshConnectionStatus(); if (this.accessible) { - await this.refreshAccessibility(); + await this.refreshAllowedResources(); + this.isAdmin = await this.isClusterAdmin(); + this.ready = true; this.ensureKubectl(); } this.activated = true; @@ -414,11 +410,13 @@ export class Cluster implements ClusterModel, ClusterState { await this.refreshConnectionStatus(); if (this.accessible) { - await this.refreshAccessibility(); + this.isAdmin = await this.isClusterAdmin(); + await this.refreshAllowedResources(); if (opts.refreshMetadata) { this.refreshMetadata(); } + this.ready = true; } this.pushState(); } @@ -435,18 +433,6 @@ export class Cluster implements ClusterModel, ClusterState { this.metadata = Object.assign(existingMetadata, metadata); } - /** - * @internal - */ - private async refreshAccessibility(): Promise { - this.isAdmin = await this.isClusterAdmin(); - this.isGlobalWatchEnabled = await this.canUseWatchApi({ resource: "*" }); - - await this.refreshAllowedResources(); - - this.ready = true; - } - /** * @internal */ @@ -585,17 +571,6 @@ export class Cluster implements ClusterModel, ClusterState { }); } - /** - * @internal - */ - async canUseWatchApi(customizeResource: V1ResourceAttributes = {}): Promise { - return this.canI({ - verb: "watch", - resource: "*", - ...customizeResource, - }); - } - toJSON(): ClusterModel { const model: ClusterModel = { id: this.id, @@ -629,7 +604,6 @@ export class Cluster implements ClusterModel, ClusterState { isAdmin: this.isAdmin, allowedNamespaces: this.allowedNamespaces, allowedResources: this.allowedResources, - isGlobalWatchEnabled: this.isGlobalWatchEnabled, }; return toJS(state, { diff --git a/src/renderer/api/kube-watch-api.ts b/src/renderer/api/kube-watch-api.ts index d3b2b4512a..8adf58676f 100644 --- a/src/renderer/api/kube-watch-api.ts +++ b/src/renderer/api/kube-watch-api.ts @@ -5,11 +5,12 @@ import type { Cluster } from "../../main/cluster"; import type { IKubeWatchEvent, IKubeWatchEventStreamEnd, IWatchRoutePayload } from "../../main/routes/watch-route"; import type { KubeObject } from "./kube-object"; import type { KubeObjectStore } from "../kube-object.store"; +import type { NamespaceStore } from "../components/+namespaces/namespace.store"; import plimit from "p-limit"; import debounce from "lodash/debounce"; -import { autorun, comparer, computed, IReactionDisposer, observable, reaction } from "mobx"; -import { autobind, EventEmitter, noop } from "../utils"; +import { comparer, computed, observable, reaction } from "mobx"; +import { autobind, EventEmitter } from "../utils"; import { ensureObjectSelfLink, KubeApi, parseKubeApi } from "./kube-api"; import { KubeJsonApiData, KubeJsonApiError } from "./kube-json-api"; import { apiPrefix, isDebugging, isProduction } from "../../common/vars"; @@ -18,7 +19,6 @@ import { apiManager } from "./api-manager"; export { IKubeWatchEvent, IKubeWatchEventStreamEnd }; export interface IKubeWatchMessage { - namespace?: string; data?: IKubeWatchEvent error?: IKubeWatchEvent; api?: KubeApi; @@ -28,7 +28,7 @@ export interface IKubeWatchMessage { export interface IKubeWatchSubscribeStoreOptions { preload?: boolean; // preload store items, default: true waitUntilLoaded?: boolean; // subscribe only after loading all stores, default: true - loadOnce?: boolean; // check store.isLoaded to skip loading if done already, default: false + cacheLoading?: boolean; // when enabled loading store will be skipped, default: false } export interface IKubeWatchReconnectOptions { @@ -43,49 +43,50 @@ export interface IKubeWatchLog { @autobind() export class KubeWatchApi { + private cluster: Cluster; + private namespaceStore: NamespaceStore; + private requestId = 0; + private isConnected = false; private reader: ReadableStreamReader; + private subscribers = observable.map(); + + // events public onMessage = new EventEmitter<[IKubeWatchMessage]>(); - @observable.ref private cluster: Cluster; - @observable.ref private namespaces: string[] = []; - @observable subscribers = observable.map(); - @observable isConnected = false; - - @computed get isReady(): boolean { - return Boolean(this.cluster && this.namespaces); - } - @computed get isActive(): boolean { return this.apis.length > 0; } @computed get apis(): string[] { - if (!this.isReady) { - return []; - } + const { cluster, namespaceStore } = this; + const activeApis = Array.from(this.subscribers.keys()); - return Array.from(this.subscribers.keys()).map(api => { - if (!this.isAllowedApi(api)) { + return activeApis.map(api => { + if (!cluster.isAllowedResource(api.kind)) { return []; } - if (api.isNamespaced && !this.cluster.isGlobalWatchEnabled) { - return this.namespaces.map(namespace => api.getWatchUrl(namespace)); + if (api.isNamespaced) { + return namespaceStore.getContextNamespaces().map(namespace => api.getWatchUrl(namespace)); + } else { + return api.getWatchUrl(); } - - return api.getWatchUrl(); }).flat(); } - async init({ getCluster, getNamespaces }: { - getCluster: () => Cluster, - getNamespaces: () => string[], - }): Promise { - autorun(() => { - this.cluster = getCluster(); - this.namespaces = getNamespaces(); - }); + constructor() { + this.init(); + } + + private async init() { + const { getHostedCluster } = await import("../../common/cluster-store"); + const { namespaceStore } = await import("../components/+namespaces/namespace.store"); + + await namespaceStore.whenReady; + + this.cluster = getHostedCluster(); + this.namespaceStore = namespaceStore; this.bindAutoConnect(); } @@ -107,7 +108,7 @@ export class KubeWatchApi { } isAllowedApi(api: KubeApi): boolean { - return Boolean(this?.cluster.isAllowedResource(api.kind)); + return !!this?.cluster.isAllowedResource(api.kind); } subscribeApi(api: KubeApi | KubeApi[]): () => void { @@ -128,66 +129,45 @@ export class KubeWatchApi { }; } - preloadStores(stores: KubeObjectStore[], { loadOnce = false } = {}) { + subscribeStores(stores: KubeObjectStore[], options: IKubeWatchSubscribeStoreOptions = {}): () => void { + const { preload = true, waitUntilLoaded = true, cacheLoading = false } = options; const limitRequests = plimit(1); // load stores one by one to allow quick skipping when fast clicking btw pages const preloading: Promise[] = []; - - for (const store of stores) { - preloading.push(limitRequests(async () => { - if (store.isLoaded && loadOnce) return; // skip - - return store.loadAll(this.namespaces); - })); - } - - return { - loading: Promise.allSettled(preloading), - cancelLoading: () => limitRequests.clearQueue(), - }; - } - - subscribeStores(stores: KubeObjectStore[], options: IKubeWatchSubscribeStoreOptions = {}): () => void { - const { preload = true, waitUntilLoaded = true, loadOnce = false } = options; const apis = new Set(stores.map(store => store.getSubscribeApis()).flat()); const unsubscribeList: (() => void)[] = []; let isUnsubscribed = false; - const load = () => this.preloadStores(stores, { loadOnce }); - let preloading = preload && load(); - let cancelReloading: IReactionDisposer = noop; - const subscribe = () => { if (isUnsubscribed) return; apis.forEach(api => unsubscribeList.push(this.subscribeApi(api))); }; - if (preloading) { - if (waitUntilLoaded) { - preloading.loading.then(subscribe, error => { - this.log({ - message: new Error("Loading stores has failed"), - meta: { stores, error, options }, - }); - }); - } else { - subscribe(); - } + if (preload) { + for (const store of stores) { + preloading.push(limitRequests(async () => { + if (cacheLoading && store.isLoaded) return; // skip - // reload when context namespaces changes - cancelReloading = reaction(() => this.namespaces, () => { - preloading?.cancelLoading(); - preloading = load(); - }, { - equals: comparer.shallow, + return store.loadAll(); + })); + } + } + + if (waitUntilLoaded) { + Promise.all(preloading).then(subscribe, error => { + this.log({ + message: new Error("Loading stores has failed"), + meta: { stores, error, options }, + }); }); + } else { + subscribe(); } // unsubscribe return () => { if (isUnsubscribed) return; isUnsubscribed = true; - cancelReloading(); - preloading?.cancelLoading(); + limitRequests.clearQueue(); unsubscribeList.forEach(unsubscribe => unsubscribe()); }; } @@ -274,10 +254,6 @@ export class KubeWatchApi { const kubeEvent: IKubeWatchEvent = JSON.parse(json); const message = this.getMessage(kubeEvent); - if (!this.namespaces.includes(message.namespace)) { - continue; // skip updates from non-watching resources context - } - this.onMessage.emit(message); } catch (error) { return json; @@ -310,7 +286,6 @@ export class KubeWatchApi { message.api = api; message.store = apiManager.getStore(api); - message.namespace = namespace; } break; } diff --git a/src/renderer/components/+apps-releases/release.store.ts b/src/renderer/components/+apps-releases/release.store.ts index 0ca6f45b39..6f7ed39fed 100644 --- a/src/renderer/components/+apps-releases/release.store.ts +++ b/src/renderer/components/+apps-releases/release.store.ts @@ -58,11 +58,11 @@ export class ReleaseStore extends ItemStore { } @action - async loadAll(namespaces = namespaceStore.allowedNamespaces) { + async loadAll() { this.isLoading = true; try { - const items = await this.loadItems(namespaces); + const items = await this.loadItems(namespaceStore.getContextNamespaces()); this.items.replace(this.sortItems(items)); this.isLoaded = true; @@ -73,10 +73,6 @@ export class ReleaseStore extends ItemStore { } } - async loadSelectedNamespaces(): Promise { - return this.loadAll(namespaceStore.getContextNamespaces()); - } - async loadItems(namespaces: string[]) { return Promise .all(namespaces.map(namespace => helmReleasesApi.list(namespace))) @@ -86,7 +82,7 @@ export class ReleaseStore extends ItemStore { async create(payload: IReleaseCreatePayload) { const response = await helmReleasesApi.create(payload); - if (this.isLoaded) this.loadSelectedNamespaces(); + if (this.isLoaded) this.loadAll(); return response; } @@ -94,7 +90,7 @@ export class ReleaseStore extends ItemStore { async update(name: string, namespace: string, payload: IReleaseUpdatePayload) { const response = await helmReleasesApi.update(name, namespace, payload); - if (this.isLoaded) this.loadSelectedNamespaces(); + if (this.isLoaded) this.loadAll(); return response; } @@ -102,7 +98,7 @@ export class ReleaseStore extends ItemStore { async rollback(name: string, namespace: string, revision: number) { const response = await helmReleasesApi.rollback(name, namespace, revision); - if (this.isLoaded) this.loadSelectedNamespaces(); + if (this.isLoaded) this.loadAll(); return response; } diff --git a/src/renderer/components/+custom-resources/crd-resources.tsx b/src/renderer/components/+custom-resources/crd-resources.tsx index 2bae92b8d4..b9008b410d 100644 --- a/src/renderer/components/+custom-resources/crd-resources.tsx +++ b/src/renderer/components/+custom-resources/crd-resources.tsx @@ -30,7 +30,7 @@ export class CrdResources extends React.Component { const { store } = this; if (store && !store.isLoading && !store.isLoaded) { - store.loadSelectedNamespaces(); + store.loadAll(); } }) ]); diff --git a/src/renderer/components/+events/kube-event-details.tsx b/src/renderer/components/+events/kube-event-details.tsx index 60821d416d..34b16103f0 100644 --- a/src/renderer/components/+events/kube-event-details.tsx +++ b/src/renderer/components/+events/kube-event-details.tsx @@ -14,7 +14,7 @@ export interface KubeEventDetailsProps { @observer export class KubeEventDetails extends React.Component { async componentDidMount() { - eventStore.loadSelectedNamespaces(); + eventStore.loadAll(); } render() { diff --git a/src/renderer/components/+namespaces/namespace-details.tsx b/src/renderer/components/+namespaces/namespace-details.tsx index e7397b6a5e..5dfa93cea7 100644 --- a/src/renderer/components/+namespaces/namespace-details.tsx +++ b/src/renderer/components/+namespaces/namespace-details.tsx @@ -32,8 +32,8 @@ export class NamespaceDetails extends React.Component { } componentDidMount() { - resourceQuotaStore.loadSelectedNamespaces(); - limitRangeStore.loadSelectedNamespaces(); + resourceQuotaStore.loadAll(); + limitRangeStore.loadAll(); } render() { diff --git a/src/renderer/components/+namespaces/namespace.store.ts b/src/renderer/components/+namespaces/namespace.store.ts index c56043766a..056e1ab24e 100644 --- a/src/renderer/components/+namespaces/namespace.store.ts +++ b/src/renderer/components/+namespaces/namespace.store.ts @@ -73,7 +73,7 @@ export class NamespaceStore extends KubeObjectStore { } private autoLoadAllowedNamespaces(): IReactionDisposer { - return reaction(() => this.allowedNamespaces, namespaces => this.loadAll(namespaces), { + return reaction(() => this.allowedNamespaces, () => this.loadAll(), { fireImmediately: true, equals: comparer.shallow, }); diff --git a/src/renderer/components/+nodes/node-details.tsx b/src/renderer/components/+nodes/node-details.tsx index d4208c4545..824affafee 100644 --- a/src/renderer/components/+nodes/node-details.tsx +++ b/src/renderer/components/+nodes/node-details.tsx @@ -29,7 +29,9 @@ export class NodeDetails extends React.Component { }); async componentDidMount() { - podsStore.loadSelectedNamespaces(); + if (!podsStore.isLoaded) { + podsStore.loadAll(); + } } componentWillUnmount() { diff --git a/src/renderer/components/+user-management-roles-bindings/add-role-binding-dialog.tsx b/src/renderer/components/+user-management-roles-bindings/add-role-binding-dialog.tsx index 808cef90d6..ab06126bd2 100644 --- a/src/renderer/components/+user-management-roles-bindings/add-role-binding-dialog.tsx +++ b/src/renderer/components/+user-management-roles-bindings/add-role-binding-dialog.tsx @@ -80,7 +80,7 @@ export class AddRoleBindingDialog extends React.Component { ]; this.isLoading = true; - await Promise.all(stores.map(store => store.loadSelectedNamespaces())); + await Promise.all(stores.map(store => store.loadAll())); this.isLoading = false; } diff --git a/src/renderer/components/+workloads-cronjobs/cronjob-details.tsx b/src/renderer/components/+workloads-cronjobs/cronjob-details.tsx index 4daff4abed..6fd04ffe7e 100644 --- a/src/renderer/components/+workloads-cronjobs/cronjob-details.tsx +++ b/src/renderer/components/+workloads-cronjobs/cronjob-details.tsx @@ -20,7 +20,9 @@ interface Props extends KubeObjectDetailsProps { @observer export class CronJobDetails extends React.Component { async componentDidMount() { - jobStore.loadSelectedNamespaces(); + if (!jobStore.isLoaded) { + jobStore.loadAll(); + } } render() { diff --git a/src/renderer/components/+workloads-daemonsets/daemonset-details.tsx b/src/renderer/components/+workloads-daemonsets/daemonset-details.tsx index ab3269ede5..44ccbaac56 100644 --- a/src/renderer/components/+workloads-daemonsets/daemonset-details.tsx +++ b/src/renderer/components/+workloads-daemonsets/daemonset-details.tsx @@ -30,7 +30,9 @@ export class DaemonSetDetails extends React.Component { }); componentDidMount() { - podsStore.loadSelectedNamespaces(); + if (!podsStore.isLoaded) { + podsStore.loadAll(); + } } componentWillUnmount() { diff --git a/src/renderer/components/+workloads-deployments/deployment-details.tsx b/src/renderer/components/+workloads-deployments/deployment-details.tsx index e22137ea67..26cd4c0b23 100644 --- a/src/renderer/components/+workloads-deployments/deployment-details.tsx +++ b/src/renderer/components/+workloads-deployments/deployment-details.tsx @@ -31,7 +31,9 @@ export class DeploymentDetails extends React.Component { }); componentDidMount() { - podsStore.loadSelectedNamespaces(); + if (!podsStore.isLoaded) { + podsStore.loadAll(); + } } componentWillUnmount() { diff --git a/src/renderer/components/+workloads-jobs/job-details.tsx b/src/renderer/components/+workloads-jobs/job-details.tsx index 4ce4a9bc61..dfa16fe760 100644 --- a/src/renderer/components/+workloads-jobs/job-details.tsx +++ b/src/renderer/components/+workloads-jobs/job-details.tsx @@ -25,7 +25,9 @@ interface Props extends KubeObjectDetailsProps { @observer export class JobDetails extends React.Component { async componentDidMount() { - podsStore.loadSelectedNamespaces(); + if (!podsStore.isLoaded) { + podsStore.loadAll(); + } } render() { diff --git a/src/renderer/components/+workloads-replicasets/replicaset-details.tsx b/src/renderer/components/+workloads-replicasets/replicaset-details.tsx index f427d78e9d..8c28d81a83 100644 --- a/src/renderer/components/+workloads-replicasets/replicaset-details.tsx +++ b/src/renderer/components/+workloads-replicasets/replicaset-details.tsx @@ -29,7 +29,9 @@ export class ReplicaSetDetails extends React.Component { }); async componentDidMount() { - podsStore.loadSelectedNamespaces(); + if (!podsStore.isLoaded) { + podsStore.loadAll(); + } } componentWillUnmount() { diff --git a/src/renderer/components/+workloads-statefulsets/statefulset-details.tsx b/src/renderer/components/+workloads-statefulsets/statefulset-details.tsx index 780572eb96..d30633ff32 100644 --- a/src/renderer/components/+workloads-statefulsets/statefulset-details.tsx +++ b/src/renderer/components/+workloads-statefulsets/statefulset-details.tsx @@ -30,7 +30,9 @@ export class StatefulSetDetails extends React.Component { }); componentDidMount() { - podsStore.loadSelectedNamespaces(); + if (!podsStore.isLoaded) { + podsStore.loadAll(); + } } componentWillUnmount() { diff --git a/src/renderer/components/app.tsx b/src/renderer/components/app.tsx index 2236b3d6be..2b36bf0057 100755 --- a/src/renderer/components/app.tsx +++ b/src/renderer/components/app.tsx @@ -1,5 +1,4 @@ import React from "react"; -import { computed, observable, reaction } from "mobx"; import { disposeOnUnmount, observer } from "mobx-react"; import { Redirect, Route, Router, Switch } from "react-router"; import { history } from "../navigation"; @@ -43,7 +42,7 @@ import { ClusterPageMenuRegistration, clusterPageMenuRegistry } from "../../exte import { TabLayout, TabLayoutRoute } from "./layout/tab-layout"; import { StatefulSetScaleDialog } from "./+workloads-statefulsets/statefulset-scale-dialog"; import { eventStore } from "./+events/event.store"; -import { namespaceStore } from "./+namespaces/namespace.store"; +import { computed, reaction, observable } from "mobx"; import { nodesStore } from "./+nodes/nodes.store"; import { podsStore } from "./+workloads-pods/pods.store"; import { kubeWatchApi } from "../api/kube-watch-api"; @@ -75,12 +74,6 @@ export class App extends React.Component { window.location.reload(); }); whatInput.ask(); // Start to monitor user input device - - await namespaceStore.whenReady; - await kubeWatchApi.init({ - getCluster: getHostedCluster, - getNamespaces: namespaceStore.getContextNamespaces, - }); } componentDidMount() { diff --git a/src/renderer/components/dock/upgrade-chart.store.ts b/src/renderer/components/dock/upgrade-chart.store.ts index f609420d9d..bc7445e29d 100644 --- a/src/renderer/components/dock/upgrade-chart.store.ts +++ b/src/renderer/components/dock/upgrade-chart.store.ts @@ -80,7 +80,7 @@ export class UpgradeChartStore extends DockTabStore { const values = this.values.getData(tabId); await Promise.all([ - !releaseStore.isLoaded && releaseStore.loadSelectedNamespaces(), + !releaseStore.isLoaded && releaseStore.loadAll(), !values && this.loadValues(tabId) ]); } diff --git a/src/renderer/components/item-object-list/item-list-layout.tsx b/src/renderer/components/item-object-list/item-list-layout.tsx index ac0d2ea635..b13d496064 100644 --- a/src/renderer/components/item-object-list/item-list-layout.tsx +++ b/src/renderer/components/item-object-list/item-list-layout.tsx @@ -138,7 +138,7 @@ export class ItemListLayout extends React.Component { const { store, dependentStores } = this.props; const stores = Array.from(new Set([store, ...dependentStores])); - stores.forEach(store => store.loadAll(namespaceStore.getContextNamespaces())); + stores.forEach(store => store.loadAll()); } private filterCallbacks: { [type: string]: ItemsFilter } = { diff --git a/src/renderer/components/layout/sidebar.tsx b/src/renderer/components/layout/sidebar.tsx index 20c401ab4f..b44dd4a759 100644 --- a/src/renderer/components/layout/sidebar.tsx +++ b/src/renderer/components/layout/sidebar.tsx @@ -40,7 +40,9 @@ interface Props { @observer export class Sidebar extends React.Component { async componentDidMount() { - crdStore.loadSelectedNamespaces(); + if (!crdStore.isLoaded && isAllowedResource("customresourcedefinitions")) { + crdStore.loadAll(); + } } renderCustomResources() { diff --git a/src/renderer/kube-object.store.ts b/src/renderer/kube-object.store.ts index d56e6bd912..760ebd3335 100644 --- a/src/renderer/kube-object.store.ts +++ b/src/renderer/kube-object.store.ts @@ -106,18 +106,17 @@ export abstract class KubeObjectStore extends ItemSt } @action - async loadAll(namespaces: string[] = []): Promise { + async loadAll({ namespaces: contextNamespaces }: { namespaces?: string[] } = {}) { this.isLoading = true; try { - if (!namespaces.length) { + if (!contextNamespaces) { const { namespaceStore } = await import("./components/+namespaces/namespace.store"); - // load all available namespaces by default - namespaces.push(...namespaceStore.allowedNamespaces); + contextNamespaces = namespaceStore.getContextNamespaces(); } - let items = await this.loadItems({ namespaces, api: this.api }); + let items = await this.loadItems({ namespaces: contextNamespaces, api: this.api }); items = this.filterItemsOnLoad(items); items = this.sortItems(items); @@ -132,12 +131,6 @@ export abstract class KubeObjectStore extends ItemSt } } - async loadSelectedNamespaces(): Promise { - const { namespaceStore } = await import("./components/+namespaces/namespace.store"); - - return this.loadAll(namespaceStore.getContextNamespaces()); - } - protected resetOnError(error: any) { if (error) this.reset(); }