diff --git a/src/common/base-store.ts b/src/common/base-store.ts index 826fde14e1..e37db81121 100644 --- a/src/common/base-store.ts +++ b/src/common/base-store.ts @@ -3,13 +3,11 @@ import Config from "conf"; import { Options as ConfOptions } from "conf/dist/source/types"; import { app, ipcMain, IpcMainEvent, ipcRenderer, IpcRendererEvent, remote } from "electron"; import { IReactionOptions, makeObservable, observable, reaction, runInAction, when } from "mobx"; -import { getAppVersion, Singleton, toJS } from "./utils"; +import { getAppVersion, Singleton, toJS, Disposer } from "./utils"; import logger from "../main/logger"; import { broadcastMessage, subscribeToBroadcast, unsubscribeFromBroadcast } from "./ipc"; import isEqual from "lodash/isEqual"; -// FIXME: sync/saving doesn't work - export interface BaseStoreParams extends ConfOptions { autoLoad?: boolean; syncEnabled?: boolean; @@ -21,14 +19,18 @@ export interface BaseStoreParams extends ConfOptions { */ export abstract class BaseStore extends Singleton { protected storeConfig?: Config; - protected syncDisposers: Function[] = []; + protected syncDisposers: Disposer[] = []; - whenLoaded = when(() => this.isLoaded); @observable isLoaded = false; + get whenLoaded() { + return when(() => this.isLoaded); + } + protected constructor(protected params: BaseStoreParams) { super(); makeObservable(this); + this.params = { autoLoad: false, syncEnabled: true, diff --git a/src/extensions/extension-discovery.ts b/src/extensions/extension-discovery.ts index 2a4e1f3ccd..4c92d735a1 100644 --- a/src/extensions/extension-discovery.ts +++ b/src/extensions/extension-discovery.ts @@ -65,7 +65,10 @@ export class ExtensionDiscovery extends Singleton { // True if extensions have been loaded from the disk after app startup @observable isLoaded = false; - whenLoaded = when(() => this.isLoaded); + + get whenLoaded() { + return when(() => this.isLoaded); + } // IPC channel to broadcast changes to extension-discovery from main protected static readonly extensionDiscoveryChannel = "extension-discovery:main"; diff --git a/src/extensions/extension-loader.ts b/src/extensions/extension-loader.ts index b8fc464284..86f5a32bd9 100644 --- a/src/extensions/extension-loader.ts +++ b/src/extensions/extension-loader.ts @@ -37,7 +37,10 @@ export class ExtensionLoader extends Singleton { private events = new EventEmitter(); @observable isLoaded = false; - whenLoaded = when(() => this.isLoaded); + + get whenLoaded() { + return when(() => this.isLoaded); + } constructor() { super(); diff --git a/src/main/cluster.ts b/src/main/cluster.ts index 01dfdf5301..2de8bff946 100644 --- a/src/main/cluster.ts +++ b/src/main/cluster.ts @@ -71,7 +71,9 @@ export class Cluster implements ClusterModel, ClusterState { protected activated = false; private resourceAccessStatuses: Map = new Map(); - whenReady = when(() => this.ready); + get whenReady() { + return when(() => this.ready); + } /** * Kubeconfig context name diff --git a/src/renderer/api/kube-watch-api.ts b/src/renderer/api/kube-watch-api.ts index 4574820dc1..413ba1e354 100644 --- a/src/renderer/api/kube-watch-api.ts +++ b/src/renderer/api/kube-watch-api.ts @@ -5,7 +5,7 @@ import type { KubeObjectStore } from "../kube-object.store"; import type { ClusterContext } from "../components/context"; import plimit from "p-limit"; -import { comparer, IReactionDisposer, observable, reaction, when, makeObservable } from "mobx"; +import { comparer, IReactionDisposer, observable, reaction, makeObservable } from "mobx"; import { autoBind, noop } from "../utils"; import { KubeApi } from "./kube-api"; import { KubeJsonApiData } from "./kube-json-api"; @@ -32,8 +32,6 @@ export interface IKubeWatchLog { export class KubeWatchApi { @observable context: ClusterContext = null; - contextReady = when(() => Boolean(this.context)); - constructor() { makeObservable(this); autoBind(this); diff --git a/src/renderer/components/+namespaces/namespace.store.ts b/src/renderer/components/+namespaces/namespace.store.ts index 4a2d3eb0ec..7e4b8720d6 100644 --- a/src/renderer/components/+namespaces/namespace.store.ts +++ b/src/renderer/components/+namespaces/namespace.store.ts @@ -1,4 +1,4 @@ -import { action, comparer, computed, IReactionDisposer, IReactionOptions, makeObservable, reaction, when, } from "mobx"; +import { action, comparer, computed, IReactionDisposer, IReactionOptions, makeObservable, reaction, } from "mobx"; import { autoBind, createStorage } from "../../utils"; import { KubeObjectStore, KubeObjectStoreLoadingParams } from "../../kube-object.store"; import { Namespace, namespacesApi } from "../../api/endpoints/namespaces.api"; @@ -24,7 +24,7 @@ export class NamespaceStore extends KubeObjectStore { private async init() { await this.contextReady; - await when(() => this.storage.initialized); + await this.storage.whenReady; this.setContext(this.initialNamespaces); this.autoLoadAllowedNamespaces(); diff --git a/src/renderer/kube-object.store.ts b/src/renderer/kube-object.store.ts index 5152faf7a4..00de88b8fc 100644 --- a/src/renderer/kube-object.store.ts +++ b/src/renderer/kube-object.store.ts @@ -1,6 +1,6 @@ import type { ClusterContext } from "./components/context"; -import { action, computed, observable, reaction, when, makeObservable } from "mobx"; +import { action, computed, makeObservable, observable, reaction, when } from "mobx"; import { autoBind, bifurcateArray, noop, rejectPromiseBy } from "./utils"; import { KubeObject, KubeStatus } from "./api/kube-object"; import { IKubeWatchEvent } from "./api/kube-watch-api"; @@ -24,8 +24,13 @@ export abstract class KubeObjectStore extends ItemSt public readonly bufferSize: number = 50000; @observable private loadedNamespaces?: string[]; - contextReady = when(() => Boolean(this.context)); - namespacesReady = when(() => Boolean(this.loadedNamespaces)); + get contextReady() { + return when(() => Boolean(this.context)); + } + + get namespacesReady() { + return when(() => Boolean(this.loadedNamespaces)); + } constructor() { super(); @@ -114,8 +119,8 @@ export abstract class KubeObjectStore extends ItemSt } const isLoadingAll = this.context.allNamespaces?.length > 1 - && this.context.cluster.accessibleNamespaces.length === 0 - && this.context.allNamespaces.every(ns => namespaces.includes(ns)); + && this.context.cluster.accessibleNamespaces.length === 0 + && this.context.allNamespaces.every(ns => namespaces.includes(ns)); if (isLoadingAll) { this.loadedNamespaces = []; diff --git a/src/renderer/utils/storageHelper.ts b/src/renderer/utils/storageHelper.ts index 6fd54b2e36..4e61651364 100755 --- a/src/renderer/utils/storageHelper.ts +++ b/src/renderer/utils/storageHelper.ts @@ -26,7 +26,10 @@ export class StorageHelper { private data: IObservableValue; @observable initialized = false; - whenReady = when(() => this.initialized); // FIXME: invalid, use when() at the place of usage + + get whenReady() { + return when(() => this.initialized); + } get defaultValue(): T { // return as-is since options.defaultValue might be a getter too @@ -35,6 +38,7 @@ export class StorageHelper { constructor(readonly key: string, private options: StorageHelperOptions) { const { storage, defaultValue, autoInit = true } = options; + makeObservable(this); this.storage = storage;