1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

mobx-6 migration -- part 2 (npx mobx-undecorate --keepDecorators)

Signed-off-by: Roman <ixrock@gmail.com>
This commit is contained in:
Roman 2021-05-06 15:39:11 +03:00
parent a0fb8b5933
commit ae1b840df7
135 changed files with 750 additions and 139 deletions

View File

@ -25,7 +25,7 @@ The following example code creates a store for the `appPreferences` guide exampl
``` typescript ``` typescript
import { Store } from "@k8slens/extensions"; import { Store } from "@k8slens/extensions";
import { observable, toJS } from "mobx"; import { observable, toJS, makeObservable } from "mobx";
export type ExamplePreferencesModel = { export type ExamplePreferencesModel = {
enabled: boolean; enabled: boolean;
@ -42,6 +42,7 @@ export class ExamplePreferencesStore extends Store.ExtensionStore<ExamplePrefere
enabled: false enabled: false
} }
}); });
makeObservable(this);
} }
protected fromStore({ enabled }: ExamplePreferencesModel): void { protected fromStore({ enabled }: ExamplePreferencesModel): void {

View File

@ -2,7 +2,7 @@ import path from "path";
import Config from "conf"; import Config from "conf";
import { Options as ConfOptions } from "conf/dist/source/types"; import { Options as ConfOptions } from "conf/dist/source/types";
import { app, ipcMain, IpcMainEvent, ipcRenderer, IpcRendererEvent, remote } from "electron"; import { app, ipcMain, IpcMainEvent, ipcRenderer, IpcRendererEvent, remote } from "electron";
import { IReactionOptions, observable, reaction, runInAction, when } from "mobx"; import { IReactionOptions, observable, reaction, runInAction, when, makeObservable } from "mobx";
import Singleton from "./utils/singleton"; import Singleton from "./utils/singleton";
import { getAppVersion } from "./utils/app-version"; import { getAppVersion } from "./utils/app-version";
import logger from "../main/logger"; import logger from "../main/logger";
@ -27,6 +27,7 @@ export abstract class BaseStore<T = any> extends Singleton {
protected constructor(protected params: BaseStoreParams) { protected constructor(protected params: BaseStoreParams) {
super(); super();
makeObservable(this);
this.params = { this.params = {
autoLoad: false, autoLoad: false,
syncEnabled: true, syncEnabled: true,

View File

@ -1,9 +1,13 @@
import { action, computed, observable, toJS } from "mobx"; import { action, computed, observable, toJS, makeObservable } from "mobx";
import { CatalogCategory, CatalogEntityData, CatalogEntityKindData } from "./catalog-entity"; import { CatalogCategory, CatalogEntityData, CatalogEntityKindData } from "./catalog-entity";
export class CatalogCategoryRegistry { export class CatalogCategoryRegistry {
@observable protected categories: CatalogCategory[] = []; @observable protected categories: CatalogCategory[] = [];
constructor() {
makeObservable(this);
}
@action add(category: CatalogCategory) { @action add(category: CatalogCategory) {
this.categories.push(category); this.categories.push(category);
} }

View File

@ -1,10 +1,21 @@
import { action, computed, observable, IComputedValue, IObservableArray } from "mobx"; import {
action,
computed,
observable,
IComputedValue,
IObservableArray,
makeObservable,
} from "mobx";
import { CatalogEntity } from "./catalog-entity"; import { CatalogEntity } from "./catalog-entity";
import { iter } from "../utils"; import { iter } from "../utils";
export class CatalogEntityRegistry { export class CatalogEntityRegistry {
protected sources = observable.map<string, IComputedValue<CatalogEntity[]>>([], { deep: true }); protected sources = observable.map<string, IComputedValue<CatalogEntity[]>>([], { deep: true });
constructor() {
makeObservable(this);
}
@action addObservableSource(id: string, source: IObservableArray<CatalogEntity>) { @action addObservableSource(id: string, source: IObservableArray<CatalogEntity>) {
this.sources.set(id, computed(() => source)); this.sources.set(id, computed(() => source));
} }

View File

@ -1,5 +1,5 @@
import { EventEmitter } from "events"; import { EventEmitter } from "events";
import { observable } from "mobx"; import { observable, makeObservable } from "mobx";
type ExtractEntityMetadataType<Entity> = Entity extends CatalogEntity<infer Metadata> ? Metadata : never; type ExtractEntityMetadataType<Entity> = Entity extends CatalogEntity<infer Metadata> ? Metadata : never;
type ExtractEntityStatusType<Entity> = Entity extends CatalogEntity<any, infer Status> ? Status : never; type ExtractEntityStatusType<Entity> = Entity extends CatalogEntity<any, infer Status> ? Status : never;
@ -123,6 +123,7 @@ export abstract class CatalogEntity<
@observable spec: Spec; @observable spec: Spec;
constructor(data: CatalogEntityData<Metadata, Status, Spec>) { constructor(data: CatalogEntityData<Metadata, Status, Spec>) {
makeObservable(this);
this.metadata = data.metadata; this.metadata = data.metadata;
this.status = data.status; this.status = data.status;
this.spec = data.spec; this.spec = data.spec;

View File

@ -1,7 +1,7 @@
import path from "path"; import path from "path";
import { app, ipcMain, ipcRenderer, remote, webFrame } from "electron"; import { app, ipcMain, ipcRenderer, remote, webFrame } from "electron";
import { unlink } from "fs-extra"; import { unlink } from "fs-extra";
import { action, comparer, computed, observable, reaction, toJS } from "mobx"; import { action, comparer, computed, observable, reaction, toJS, makeObservable } from "mobx";
import { BaseStore } from "./base-store"; import { BaseStore } from "./base-store";
import { Cluster, ClusterState } from "../main/cluster"; import { Cluster, ClusterState } from "../main/cluster";
import migrations from "../migrations/cluster-store"; import migrations from "../migrations/cluster-store";
@ -127,6 +127,8 @@ export class ClusterStore extends BaseStore<ClusterStoreModel> {
migrations, migrations,
}); });
makeObservable(this);
this.pushStateToViewsAutomatically(); this.pushStateToViewsAutomatically();
} }

View File

@ -1,4 +1,4 @@
import { action, comparer, observable, toJS } from "mobx"; import { action, comparer, observable, toJS, makeObservable } from "mobx";
import { BaseStore } from "./base-store"; import { BaseStore } from "./base-store";
import migrations from "../migrations/hotbar-store"; import migrations from "../migrations/hotbar-store";
import * as uuid from "uuid"; import * as uuid from "uuid";
@ -46,6 +46,7 @@ export class HotbarStore extends BaseStore<HotbarStoreModel> {
}, },
migrations, migrations,
}); });
makeObservable(this);
} }
get activeHotbarId() { get activeHotbarId() {

View File

@ -1,4 +1,4 @@
import { action, computed, observable,reaction } from "mobx"; import { action, computed, observable, reaction, makeObservable } from "mobx";
import { dockStore } from "../renderer/components/dock/dock.store"; import { dockStore } from "../renderer/components/dock/dock.store";
import { autobind } from "../renderer/utils"; import { autobind } from "../renderer/utils";
@ -33,6 +33,7 @@ export class SearchStore {
@observable activeOverlayIndex = -1; @observable activeOverlayIndex = -1;
constructor() { constructor() {
makeObservable(this);
reaction(() => dockStore.selectedTabId, () => { reaction(() => dockStore.selectedTabId, () => {
searchStore.reset(); searchStore.reset();
}); });

View File

@ -2,7 +2,7 @@ import type { ThemeId } from "../renderer/theme.store";
import { app, remote } from "electron"; import { app, remote } from "electron";
import semver from "semver"; import semver from "semver";
import { readFile } from "fs-extra"; import { readFile } from "fs-extra";
import { action, computed, observable, reaction, toJS } from "mobx"; import { action, computed, observable, reaction, toJS, makeObservable } from "mobx";
import moment from "moment-timezone"; import moment from "moment-timezone";
import { BaseStore } from "./base-store"; import { BaseStore } from "./base-store";
import migrations from "../migrations/user-store"; import migrations from "../migrations/user-store";
@ -52,6 +52,7 @@ export class UserStore extends BaseStore<UserStoreModel> {
configName: "lens-user-store", configName: "lens-user-store",
migrations, migrations,
}); });
makeObservable(this);
} }
@observable lastSeenAppVersion = "0.0.0"; @observable lastSeenAppVersion = "0.0.0";

View File

@ -1,4 +1,10 @@
import { action, IEnhancer, IObservableMapInitialValues, ObservableMap } from "mobx"; import {
action,
IEnhancer,
IObservableMapInitialValues,
ObservableMap,
makeObservable,
} from "mobx";
export class ExtendedMap<K, V> extends Map<K, V> { export class ExtendedMap<K, V> extends Map<K, V> {
constructor(protected getDefault: () => V, entries?: readonly (readonly [K, V])[] | null) { constructor(protected getDefault: () => V, entries?: readonly (readonly [K, V])[] | null) {
@ -33,6 +39,7 @@ export class ExtendedMap<K, V> extends Map<K, V> {
export class ExtendedObservableMap<K, V> extends ObservableMap<K, V> { export class ExtendedObservableMap<K, V> extends ObservableMap<K, V> {
constructor(protected getDefault: () => V, initialData?: IObservableMapInitialValues<K, V>, enhancer?: IEnhancer<V>, name?: string) { constructor(protected getDefault: () => V, initialData?: IObservableMapInitialValues<K, V>, enhancer?: IEnhancer<V>, name?: string) {
super(initialData, enhancer, name); super(initialData, enhancer, name);
makeObservable(this);
} }
@action @action

View File

@ -1,4 +1,4 @@
import { action, ObservableSet } from "mobx"; import { action, IEnhancer, IObservableSetInitialValues, makeObservable, ObservableSet } from "mobx";
export class ToggleSet<T> extends Set<T> { export class ToggleSet<T> extends Set<T> {
public toggle(value: T): void { public toggle(value: T): void {
@ -10,6 +10,12 @@ export class ToggleSet<T> extends Set<T> {
} }
export class ObservableToggleSet<T> extends ObservableSet<T> { export class ObservableToggleSet<T> extends ObservableSet<T> {
constructor(data?: IObservableSetInitialValues<T>, enhancer?: IEnhancer<T>) {
super(data, enhancer);
makeObservable(this);
}
@action @action
public toggle(value: T): void { public toggle(value: T): void {
if (!this.delete(value)) { if (!this.delete(value)) {

View File

@ -1,7 +1,7 @@
import fs from "fs"; import fs from "fs";
import path from "path"; import path from "path";
import hb from "handlebars"; import hb from "handlebars";
import { observable } from "mobx"; import { observable, makeObservable } from "mobx";
import { ResourceApplier } from "../main/resource-applier"; import { ResourceApplier } from "../main/resource-applier";
import { KubernetesCluster } from "./core-api/catalog"; import { KubernetesCluster } from "./core-api/catalog";
import logger from "../main/logger"; import logger from "../main/logger";
@ -22,7 +22,6 @@ export interface ClusterFeatureStatus {
} }
export abstract class ClusterFeature { export abstract class ClusterFeature {
/** /**
* this field sets the template parameters that are to be applied to any templated kubernetes resources that are to be installed for the feature. * this field sets the template parameters that are to be applied to any templated kubernetes resources that are to be installed for the feature.
* See the renderTemplates() method for more details * See the renderTemplates() method for more details
@ -75,6 +74,10 @@ export abstract class ClusterFeature {
*/ */
abstract updateStatus(cluster: KubernetesCluster): Promise<ClusterFeatureStatus>; abstract updateStatus(cluster: KubernetesCluster): Promise<ClusterFeatureStatus>;
constructor() {
makeObservable(this);
}
/** /**
* this is a helper method that conveniently applies kubernetes resources to the cluster. * this is a helper method that conveniently applies kubernetes resources to the cluster.
* *

View File

@ -2,7 +2,7 @@ import { watch } from "chokidar";
import { ipcRenderer } from "electron"; import { ipcRenderer } from "electron";
import { EventEmitter } from "events"; import { EventEmitter } from "events";
import fse from "fs-extra"; import fse from "fs-extra";
import { observable, reaction, toJS, when } from "mobx"; import { observable, reaction, toJS, when, makeObservable } from "mobx";
import os from "os"; import os from "os";
import path from "path"; import path from "path";
import { broadcastMessage, handleRequest, requestMain, subscribeToBroadcast } from "../common/ipc"; import { broadcastMessage, handleRequest, requestMain, subscribeToBroadcast } from "../common/ipc";
@ -72,6 +72,12 @@ export class ExtensionDiscovery extends Singleton {
public events = new EventEmitter(); public events = new EventEmitter();
constructor() {
super();
makeObservable(this);
}
get localFolderPath(): string { get localFolderPath(): string {
return path.join(os.homedir(), ".k8slens", "extensions"); return path.join(os.homedir(), ".k8slens", "extensions");
} }
@ -350,7 +356,7 @@ export class ExtensionDiscovery extends Singleton {
const userExtensions = await this.loadFromFolder(this.localFolderPath, bundledExtensions.map((extension) => extension.manifest.name)); const userExtensions = await this.loadFromFolder(this.localFolderPath, bundledExtensions.map((extension) => extension.manifest.name));
for (const extension of userExtensions) { for (const extension of userExtensions) {
if (await fse.pathExists(extension.manifestPath) === false) { if ((await fse.pathExists(extension.manifestPath)) === false) {
await this.installPackage(extension.absolutePath); await this.installPackage(extension.absolutePath);
} }
} }

View File

@ -1,7 +1,7 @@
import { app, ipcRenderer, remote } from "electron"; import { app, ipcRenderer, remote } from "electron";
import { EventEmitter } from "events"; import { EventEmitter } from "events";
import { isEqual } from "lodash"; import { isEqual } from "lodash";
import { action, computed, observable, reaction, when } from "mobx"; import { action, computed, observable, reaction, when, makeObservable } from "mobx";
import path from "path"; import path from "path";
import { getHostedCluster } from "../common/cluster-store"; import { getHostedCluster } from "../common/cluster-store";
import { broadcastMessage, handleRequest, requestMain, subscribeToBroadcast } from "../common/ipc"; import { broadcastMessage, handleRequest, requestMain, subscribeToBroadcast } from "../common/ipc";
@ -39,6 +39,12 @@ export class ExtensionLoader extends Singleton {
@observable isLoaded = false; @observable isLoaded = false;
whenLoaded = when(() => this.isLoaded); whenLoaded = when(() => this.isLoaded);
constructor() {
super();
makeObservable(this);
}
@computed get userExtensions(): Map<LensExtensionId, InstalledExtension> { @computed get userExtensions(): Map<LensExtensionId, InstalledExtension> {
const extensions = this.toJSON(); const extensions = this.toJSON();
@ -234,7 +240,7 @@ export class ExtensionLoader extends Singleton {
const cluster = getHostedCluster(); const cluster = getHostedCluster();
this.autoInitExtensions(async (extension: LensRendererExtension) => { this.autoInitExtensions(async (extension: LensRendererExtension) => {
if (await extension.isEnabledForCluster(cluster) === false) { if ((await extension.isEnabledForCluster(cluster)) === false) {
return []; return [];
} }

View File

@ -1,6 +1,6 @@
import type { LensExtensionId } from "./lens-extension"; import type { LensExtensionId } from "./lens-extension";
import { BaseStore } from "../common/base-store"; import { BaseStore } from "../common/base-store";
import { action, computed, observable, toJS } from "mobx"; import { action, computed, observable, toJS, makeObservable } from "mobx";
export interface LensExtensionsStoreModel { export interface LensExtensionsStoreModel {
extensions: Record<LensExtensionId, LensExtensionState>; extensions: Record<LensExtensionId, LensExtensionState>;
@ -16,6 +16,7 @@ export class ExtensionsStore extends BaseStore<LensExtensionsStoreModel> {
super({ super({
configName: "lens-extensions", configName: "lens-extensions",
}); });
makeObservable(this);
} }
@computed @computed

View File

@ -1,5 +1,5 @@
import type { InstalledExtension } from "./extension-discovery"; import type { InstalledExtension } from "./extension-discovery";
import { action, observable, reaction } from "mobx"; import { action, observable, reaction, makeObservable } from "mobx";
import { FilesystemProvisionerStore } from "../main/extension-filesystem"; import { FilesystemProvisionerStore } from "../main/extension-filesystem";
import logger from "../main/logger"; import logger from "../main/logger";
import { ProtocolHandlerRegistration } from "./registries/protocol-handler-registry"; import { ProtocolHandlerRegistration } from "./registries/protocol-handler-registry";
@ -27,6 +27,7 @@ export class LensExtension {
@observable private isEnabled = false; @observable private isEnabled = false;
constructor({ id, manifest, manifestPath, isBundled }: InstalledExtension) { constructor({ id, manifest, manifestPath, isBundled }: InstalledExtension) {
makeObservable(this);
this.id = id; this.id = id;
this.manifest = manifest; this.manifest = manifest;
this.manifestPath = manifestPath; this.manifestPath = manifestPath;

View File

@ -1,10 +1,14 @@
// Base class for extensions-api registries // Base class for extensions-api registries
import { action, observable } from "mobx"; import { action, observable, makeObservable } from "mobx";
import { LensExtension } from "../lens-extension"; import { LensExtension } from "../lens-extension";
export class BaseRegistry<T, I = T> { export class BaseRegistry<T, I = T> {
private items = observable.map<T, I>(); private items = observable.map<T, I>();
constructor() {
makeObservable(this);
}
getItems(): I[] { getItems(): I[] {
return Array.from(this.items.values()); return Array.from(this.items.values());
} }

View File

@ -1,7 +1,7 @@
// Extensions API -> Commands // Extensions API -> Commands
import { BaseRegistry } from "./base-registry"; import { BaseRegistry } from "./base-registry";
import { action, observable } from "mobx"; import { action, observable, makeObservable } from "mobx";
import { LensExtension } from "../lens-extension"; import { LensExtension } from "../lens-extension";
import { CatalogEntity } from "../../common/catalog"; import { CatalogEntity } from "../../common/catalog";
@ -20,6 +20,12 @@ export interface CommandRegistration {
export class CommandRegistry extends BaseRegistry<CommandRegistration> { export class CommandRegistry extends BaseRegistry<CommandRegistration> {
@observable activeEntity: CatalogEntity; @observable activeEntity: CatalogEntity;
constructor() {
super();
makeObservable(this);
}
@action @action
add(items: CommandRegistration | CommandRegistration[], extension?: LensExtension) { add(items: CommandRegistration | CommandRegistration[], extension?: LensExtension) {
const itemArray = [items].flat(); const itemArray = [items].flat();

View File

@ -2,7 +2,7 @@
import type { IconProps } from "../../renderer/components/icon"; import type { IconProps } from "../../renderer/components/icon";
import type React from "react"; import type React from "react";
import type { PageTarget, RegisteredPage } from "./page-registry"; import type { PageTarget, RegisteredPage } from "./page-registry";
import { action } from "mobx"; import { action, makeObservable } from "mobx";
import { BaseRegistry } from "./base-registry"; import { BaseRegistry } from "./base-registry";
import { LensExtension } from "../lens-extension"; import { LensExtension } from "../lens-extension";
@ -22,6 +22,12 @@ export interface PageMenuComponents {
} }
export class PageMenuRegistry<T extends PageMenuRegistration> extends BaseRegistry<T> { export class PageMenuRegistry<T extends PageMenuRegistration> extends BaseRegistry<T> {
constructor() {
super();
makeObservable(this);
}
@action @action
add(items: T[], ext: LensExtension) { add(items: T[], ext: LensExtension) {
const normalizedItems = items.map(menuItem => { const normalizedItems = items.map(menuItem => {

View File

@ -1,4 +1,12 @@
import { action, observable, IComputedValue, computed, ObservableMap, runInAction } from "mobx"; import {
action,
observable,
IComputedValue,
computed,
ObservableMap,
runInAction,
makeObservable,
} from "mobx";
import { CatalogEntity, catalogEntityRegistry } from "../../common/catalog"; import { CatalogEntity, catalogEntityRegistry } from "../../common/catalog";
import { watch } from "chokidar"; import { watch } from "chokidar";
import fs from "fs"; import fs from "fs";
@ -23,6 +31,12 @@ export class KubeconfigSyncManager extends Singleton {
protected static readonly syncName = "lens:kube-sync"; protected static readonly syncName = "lens:kube-sync";
constructor() {
super();
makeObservable(this);
}
@action @action
startSync(): void { startSync(): void {
if (this.syncing) { if (this.syncing) {

View File

@ -1,7 +1,7 @@
import "../common/cluster-ipc"; import "../common/cluster-ipc";
import type http from "http"; import type http from "http";
import { ipcMain } from "electron"; import { ipcMain } from "electron";
import { action, autorun, reaction, toJS } from "mobx"; import { action, autorun, reaction, toJS, makeObservable } from "mobx";
import { ClusterStore, getClusterIdFromHost } from "../common/cluster-store"; import { ClusterStore, getClusterIdFromHost } from "../common/cluster-store";
import { Cluster } from "./cluster"; import { Cluster } from "./cluster";
import logger from "./logger"; import logger from "./logger";
@ -14,6 +14,8 @@ export class ClusterManager extends Singleton {
constructor() { constructor() {
super(); super();
makeObservable(this);
reaction(() => toJS(ClusterStore.getInstance().clustersList), () => { reaction(() => toJS(ClusterStore.getInstance().clustersList), () => {
this.updateCatalog(ClusterStore.getInstance().clustersList); this.updateCatalog(ClusterStore.getInstance().clustersList);
}, { fireImmediately: true }); }, { fireImmediately: true });

View File

@ -1,6 +1,15 @@
import { ipcMain } from "electron"; import { ipcMain } from "electron";
import type { ClusterId, ClusterMetadata, ClusterModel, ClusterPreferences, ClusterPrometheusPreferences, UpdateClusterModel } from "../common/cluster-store"; import type { ClusterId, ClusterMetadata, ClusterModel, ClusterPreferences, ClusterPrometheusPreferences, UpdateClusterModel } from "../common/cluster-store";
import { action, comparer, computed, observable, reaction, toJS, when } from "mobx"; import {
action,
comparer,
computed,
observable,
reaction,
toJS,
when,
makeObservable,
} from "mobx";
import { broadcastMessage, ClusterListNamespaceForbiddenChannel } from "../common/ipc"; import { broadcastMessage, ClusterListNamespaceForbiddenChannel } from "../common/ipc";
import { ContextHandler } from "./context-handler"; import { ContextHandler } from "./context-handler";
import { AuthorizationV1Api, CoreV1Api, HttpError, KubeConfig, V1ResourceAttributes } from "@kubernetes/client-node"; import { AuthorizationV1Api, CoreV1Api, HttpError, KubeConfig, V1ResourceAttributes } from "@kubernetes/client-node";
@ -217,6 +226,7 @@ export class Cluster implements ClusterModel, ClusterState {
} }
constructor(model: ClusterModel) { constructor(model: ClusterModel) {
makeObservable(this);
this.id = model.id; this.id = model.id;
this.updateModel(model); this.updateModel(model);

View File

@ -2,7 +2,7 @@ import { randomBytes } from "crypto";
import { SHA256 } from "crypto-js"; import { SHA256 } from "crypto-js";
import { app, remote } from "electron"; import { app, remote } from "electron";
import fse from "fs-extra"; import fse from "fs-extra";
import { action, observable, toJS } from "mobx"; import { action, observable, toJS, makeObservable } from "mobx";
import path from "path"; import path from "path";
import { BaseStore } from "../common/base-store"; import { BaseStore } from "../common/base-store";
import { LensExtensionId } from "../extensions/lens-extension"; import { LensExtensionId } from "../extensions/lens-extension";
@ -19,6 +19,7 @@ export class FilesystemProvisionerStore extends BaseStore<FSProvisionModel> {
configName: "lens-filesystem-provisioner-store", configName: "lens-filesystem-provisioner-store",
accessPropertiesByDotNotation: false, // To make dots safe in cluster context names accessPropertiesByDotNotation: false, // To make dots safe in cluster context names
}); });
makeObservable(this);
} }
/** /**

View File

@ -3,7 +3,7 @@ import * as proto from "../../common/protocol-handler";
import Url from "url-parse"; import Url from "url-parse";
import { LensExtension } from "../../extensions/lens-extension"; import { LensExtension } from "../../extensions/lens-extension";
import { broadcastMessage } from "../../common/ipc"; import { broadcastMessage } from "../../common/ipc";
import { observable, when } from "mobx"; import { observable, when, makeObservable } from "mobx";
export interface FallbackHandler { export interface FallbackHandler {
(name: string): Promise<boolean>; (name: string): Promise<boolean>;
@ -15,6 +15,12 @@ export class LensProtocolRouterMain extends proto.LensProtocolRouter {
@observable rendererLoaded = false; @observable rendererLoaded = false;
@observable extensionsLoaded = false; @observable extensionsLoaded = false;
constructor() {
super();
makeObservable(this);
}
/** /**
* Find the most specific registered handler, if it exists, and invoke it. * Find the most specific registered handler, if it exists, and invoke it.
* *

View File

@ -1,5 +1,5 @@
import type { ClusterId } from "../common/cluster-store"; import type { ClusterId } from "../common/cluster-store";
import { observable } from "mobx"; import { observable, makeObservable } from "mobx";
import { app, BrowserWindow, dialog, shell, webContents } from "electron"; import { app, BrowserWindow, dialog, shell, webContents } from "electron";
import windowStateKeeper from "electron-window-state"; import windowStateKeeper from "electron-window-state";
import { appEventBus } from "../common/event-bus"; import { appEventBus } from "../common/event-bus";
@ -23,6 +23,7 @@ export class WindowManager extends Singleton {
constructor() { constructor() {
super(); super();
makeObservable(this);
this.bindEvents(); this.bindEvents();
this.initMenu(); this.initMenu();
this.initTray(); this.initTray();

View File

@ -1,6 +1,6 @@
import type { KubeObjectStore } from "../kube-object.store"; import type { KubeObjectStore } from "../kube-object.store";
import { action, observable } from "mobx"; import { action, observable, makeObservable } from "mobx";
import { autobind } from "../utils"; import { autobind } from "../utils";
import { KubeApi, parseKubeApi } from "./kube-api"; import { KubeApi, parseKubeApi } from "./kube-api";
@ -9,6 +9,10 @@ export class ApiManager {
private apis = observable.map<string, KubeApi>(); private apis = observable.map<string, KubeApi>();
private stores = observable.map<string, KubeObjectStore>(); private stores = observable.map<string, KubeObjectStore>();
constructor() {
makeObservable(this);
}
getApi(pathOrCallback: string | ((api: KubeApi) => boolean)) { getApi(pathOrCallback: string | ((api: KubeApi) => boolean)) {
if (typeof pathOrCallback === "string") { if (typeof pathOrCallback === "string") {
return this.apis.get(pathOrCallback) || this.apis.get(parseKubeApi(pathOrCallback).apiBase); return this.apis.get(pathOrCallback) || this.apis.get(parseKubeApi(pathOrCallback).apiBase);

View File

@ -1,4 +1,4 @@
import { action, observable } from "mobx"; import { action, observable, makeObservable } from "mobx";
import { broadcastMessage, subscribeToBroadcast } from "../../common/ipc"; import { broadcastMessage, subscribeToBroadcast } from "../../common/ipc";
import { CatalogCategory, CatalogEntity, CatalogEntityData, catalogCategoryRegistry, CatalogCategoryRegistry, CatalogEntityKindData } from "../../common/catalog"; import { CatalogCategory, CatalogEntity, CatalogEntityData, catalogCategoryRegistry, CatalogCategoryRegistry, CatalogEntityKindData } from "../../common/catalog";
import "../../common/catalog-entities"; import "../../common/catalog-entities";
@ -7,7 +7,9 @@ export class CatalogEntityRegistry {
@observable protected _items: CatalogEntity[] = observable.array([], { deep: true }); @observable protected _items: CatalogEntity[] = observable.array([], { deep: true });
@observable protected _activeEntity: CatalogEntity; @observable protected _activeEntity: CatalogEntity;
constructor(private categoryRegistry: CatalogCategoryRegistry) {} constructor(private categoryRegistry: CatalogCategoryRegistry) {
makeObservable(this);
}
init() { init() {
subscribeToBroadcast("catalog:items", (ev, items: (CatalogEntityData & CatalogEntityKindData)[]) => { subscribeToBroadcast("catalog:items", (ev, items: (CatalogEntityData & CatalogEntityKindData)[]) => {

View File

@ -5,7 +5,7 @@ import type { KubeObjectStore } from "../kube-object.store";
import type { ClusterContext } from "../components/context"; import type { ClusterContext } from "../components/context";
import plimit from "p-limit"; import plimit from "p-limit";
import { comparer, IReactionDisposer, observable, reaction, when } from "mobx"; import { comparer, IReactionDisposer, observable, reaction, when, makeObservable } from "mobx";
import { autobind, noop } from "../utils"; import { autobind, noop } from "../utils";
import { KubeApi } from "./kube-api"; import { KubeApi } from "./kube-api";
import { KubeJsonApiData } from "./kube-json-api"; import { KubeJsonApiData } from "./kube-json-api";
@ -35,6 +35,10 @@ export class KubeWatchApi {
contextReady = when(() => Boolean(this.context)); contextReady = when(() => Boolean(this.context));
constructor() {
makeObservable(this);
}
isAllowedApi(api: KubeApi): boolean { isAllowedApi(api: KubeApi): boolean {
return Boolean(this.context?.cluster.isAllowedResource(api.kind)); return Boolean(this.context?.cluster.isAllowedResource(api.kind));
} }

View File

@ -1,4 +1,4 @@
import { observable } from "mobx"; import { observable, makeObservable } from "mobx";
import { EventEmitter } from "../../common/event-emitter"; import { EventEmitter } from "../../common/event-emitter";
interface IParams { interface IParams {
@ -45,6 +45,7 @@ export class WebSocketApi {
}; };
constructor(protected params: IParams) { constructor(protected params: IParams) {
makeObservable(this);
this.params = Object.assign({}, WebSocketApi.defaultParams, params); this.params = Object.assign({}, WebSocketApi.defaultParams, params);
const { autoConnect, pingIntervalSeconds } = this.params; const { autoConnect, pingIntervalSeconds } = this.params;

View File

@ -1,7 +1,7 @@
import "./add-cluster.scss"; import "./add-cluster.scss";
import React from "react"; import React from "react";
import { observer } from "mobx-react"; import { observer } from "mobx-react";
import { action, observable, runInAction } from "mobx"; import { action, observable, runInAction, makeObservable } from "mobx";
import { KubeConfig } from "@kubernetes/client-node"; import { KubeConfig } from "@kubernetes/client-node";
import { AceEditor } from "../ace-editor"; import { AceEditor } from "../ace-editor";
import { Button } from "../button"; import { Button } from "../button";
@ -29,6 +29,11 @@ export class AddCluster extends React.Component {
kubeContexts = observable.map<string, KubeConfig>(); kubeContexts = observable.map<string, KubeConfig>();
constructor(props: {}) {
super(props);
makeObservable(this);
}
componentDidMount() { componentDidMount() {
appEventBus.emit({ name: "cluster-add", action: "start" }); appEventBus.emit({ name: "cluster-add", action: "start" });
} }

View File

@ -2,7 +2,7 @@ import "./helm-chart-details.scss";
import React, { Component } from "react"; import React, { Component } from "react";
import { getChartDetails, HelmChart } from "../../api/endpoints/helm-charts.api"; import { getChartDetails, HelmChart } from "../../api/endpoints/helm-charts.api";
import { observable, autorun } from "mobx"; import { observable, autorun, makeObservable } from "mobx";
import { observer } from "mobx-react"; import { observer } from "mobx-react";
import { Drawer, DrawerItem } from "../drawer"; import { Drawer, DrawerItem } from "../drawer";
import { autobind, stopPropagation } from "../../utils"; import { autobind, stopPropagation } from "../../utils";
@ -27,6 +27,11 @@ export class HelmChartDetails extends Component<Props> {
private abortController?: AbortController; private abortController?: AbortController;
constructor(props: Props) {
super(props);
makeObservable(this);
}
componentWillUnmount() { componentWillUnmount() {
this.abortController?.abort(); this.abortController?.abort();
} }

View File

@ -1,5 +1,5 @@
import semver from "semver"; import semver from "semver";
import { observable } from "mobx"; import { observable, makeObservable } from "mobx";
import { autobind } from "../../utils"; import { autobind } from "../../utils";
import { getChartDetails, HelmChart, listCharts } from "../../api/endpoints/helm-charts.api"; import { getChartDetails, HelmChart, listCharts } from "../../api/endpoints/helm-charts.api";
import { ItemStore } from "../../item.store"; import { ItemStore } from "../../item.store";
@ -14,6 +14,12 @@ export interface IChartVersion {
export class HelmChartStore extends ItemStore<HelmChart> { export class HelmChartStore extends ItemStore<HelmChart> {
@observable versions = observable.map<string, IChartVersion[]>(); @observable versions = observable.map<string, IChartVersion[]>();
constructor() {
super();
makeObservable(this);
}
async loadAll() { async loadAll() {
try { try {
const res = await this.loadItems(() => listCharts()); const res = await this.loadItems(() => listCharts());

View File

@ -3,7 +3,7 @@ import "./release-details.scss";
import React, { Component } from "react"; import React, { Component } from "react";
import groupBy from "lodash/groupBy"; import groupBy from "lodash/groupBy";
import isEqual from "lodash/isEqual"; import isEqual from "lodash/isEqual";
import { observable, reaction } from "mobx"; import { observable, reaction, makeObservable } from "mobx";
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
import kebabCase from "lodash/kebabCase"; import kebabCase from "lodash/kebabCase";
import { getRelease, getReleaseValues, HelmRelease, IReleaseDetails } from "../../api/endpoints/helm-releases.api"; import { getRelease, getReleaseValues, HelmRelease, IReleaseDetails } from "../../api/endpoints/helm-releases.api";
@ -64,6 +64,11 @@ export class ReleaseDetails extends Component<Props> {
this.releaseSecret = secret; this.releaseSecret = secret;
}); });
constructor(props: Props) {
super(props);
makeObservable(this);
}
async loadDetails() { async loadDetails() {
const { release } = this.props; const { release } = this.props;

View File

@ -1,7 +1,7 @@
import "./release-rollback-dialog.scss"; import "./release-rollback-dialog.scss";
import React from "react"; import React from "react";
import { observable } from "mobx"; import { observable, makeObservable } from "mobx";
import { observer } from "mobx-react"; import { observer } from "mobx-react";
import { Dialog, DialogProps } from "../dialog"; import { Dialog, DialogProps } from "../dialog";
import { Wizard, WizardStep } from "../wizard"; import { Wizard, WizardStep } from "../wizard";
@ -23,6 +23,11 @@ export class ReleaseRollbackDialog extends React.Component<Props> {
@observable revision: IReleaseRevision; @observable revision: IReleaseRevision;
@observable revisions = observable.array<IReleaseRevision>(); @observable revisions = observable.array<IReleaseRevision>();
constructor(props: Props) {
super(props);
makeObservable(this);
}
static open(release: HelmRelease) { static open(release: HelmRelease) {
ReleaseRollbackDialog.isOpen = true; ReleaseRollbackDialog.isOpen = true;
ReleaseRollbackDialog.release = release; ReleaseRollbackDialog.release = release;

View File

@ -1,5 +1,5 @@
import isEqual from "lodash/isEqual"; import isEqual from "lodash/isEqual";
import { action, observable, reaction, when } from "mobx"; import { action, observable, reaction, when, makeObservable } from "mobx";
import { autobind } from "../../utils"; import { autobind } from "../../utils";
import { createRelease, deleteRelease, HelmRelease, IReleaseCreatePayload, IReleaseUpdatePayload, listReleases, rollbackRelease, updateRelease } from "../../api/endpoints/helm-releases.api"; import { createRelease, deleteRelease, HelmRelease, IReleaseCreatePayload, IReleaseUpdatePayload, listReleases, rollbackRelease, updateRelease } from "../../api/endpoints/helm-releases.api";
import { ItemStore } from "../../item.store"; import { ItemStore } from "../../item.store";
@ -14,6 +14,7 @@ export class ReleaseStore extends ItemStore<HelmRelease> {
constructor() { constructor() {
super(); super();
makeObservable(this);
when(() => secretsStore.isLoaded, () => { when(() => secretsStore.isLoaded, () => {
this.releaseSecrets.replace(this.getReleaseSecrets()); this.releaseSecrets.replace(this.getReleaseSecrets());
}); });

View File

@ -3,7 +3,7 @@ import React from "react";
import { SpeedDial, SpeedDialAction } from "@material-ui/lab"; import { SpeedDial, SpeedDialAction } from "@material-ui/lab";
import { Icon } from "../icon"; import { Icon } from "../icon";
import { disposeOnUnmount, observer } from "mobx-react"; import { disposeOnUnmount, observer } from "mobx-react";
import { observable, reaction } from "mobx"; import { observable, reaction, makeObservable } from "mobx";
import { autobind } from "../../../common/utils"; import { autobind } from "../../../common/utils";
import { CatalogCategory, CatalogEntityAddMenuContext, CatalogEntityContextMenu } from "../../api/catalog-entity"; import { CatalogCategory, CatalogEntityAddMenuContext, CatalogEntityContextMenu } from "../../api/catalog-entity";
import { EventEmitter } from "events"; import { EventEmitter } from "events";
@ -18,6 +18,11 @@ export class CatalogAddButton extends React.Component<CatalogAddButtonProps> {
@observable protected isOpen = false; @observable protected isOpen = false;
protected menuItems = observable.array<CatalogEntityContextMenu>([]); protected menuItems = observable.array<CatalogEntityContextMenu>([]);
constructor(props: CatalogAddButtonProps) {
super(props);
makeObservable(this);
}
componentDidMount() { componentDidMount() {
disposeOnUnmount(this, [ disposeOnUnmount(this, [
reaction(() => this.props.category, (category) => { reaction(() => this.props.category, (category) => {

View File

@ -1,4 +1,4 @@
import { action, computed, IReactionDisposer, observable, reaction } from "mobx"; import { action, computed, IReactionDisposer, observable, reaction, makeObservable } from "mobx";
import { catalogEntityRegistry } from "../../api/catalog-entity-registry"; import { catalogEntityRegistry } from "../../api/catalog-entity-registry";
import { CatalogEntity, CatalogEntityActionContext } from "../../api/catalog-entity"; import { CatalogEntity, CatalogEntityActionContext } from "../../api/catalog-entity";
import { ItemObject, ItemStore } from "../../item.store"; import { ItemObject, ItemStore } from "../../item.store";
@ -6,7 +6,9 @@ import { autobind } from "../../utils";
import { CatalogCategory } from "../../../common/catalog"; import { CatalogCategory } from "../../../common/catalog";
export class CatalogEntityItem implements ItemObject { export class CatalogEntityItem implements ItemObject {
constructor(public entity: CatalogEntity) {} constructor(public entity: CatalogEntity) {
makeObservable(this);
}
get name() { get name() {
return this.entity.metadata.name; return this.entity.metadata.name;
@ -67,6 +69,12 @@ export class CatalogEntityItem implements ItemObject {
export class CatalogEntityStore extends ItemStore<CatalogEntityItem> { export class CatalogEntityStore extends ItemStore<CatalogEntityItem> {
@observable activeCategory?: CatalogCategory; @observable activeCategory?: CatalogCategory;
constructor() {
super();
makeObservable(this);
}
@computed get entities() { @computed get entities() {
if (!this.activeCategory) { if (!this.activeCategory) {
return catalogEntityRegistry.items.map(entity => new CatalogEntityItem(entity)); return catalogEntityRegistry.items.map(entity => new CatalogEntityItem(entity));

View File

@ -2,7 +2,7 @@ import "./catalog.scss";
import React from "react"; import React from "react";
import { disposeOnUnmount, observer } from "mobx-react"; import { disposeOnUnmount, observer } from "mobx-react";
import { ItemListLayout } from "../item-object-list"; import { ItemListLayout } from "../item-object-list";
import { action, observable, reaction } from "mobx"; import { action, observable, reaction, makeObservable } from "mobx";
import { CatalogEntityItem, CatalogEntityStore } from "./catalog-entity.store"; import { CatalogEntityItem, CatalogEntityStore } from "./catalog-entity.store";
import { navigate } from "../../navigation"; import { navigate } from "../../navigation";
import { kebabCase } from "lodash"; import { kebabCase } from "lodash";
@ -29,6 +29,11 @@ export class Catalog extends React.Component {
@observable.deep private contextMenu: CatalogEntityContextMenuContext; @observable.deep private contextMenu: CatalogEntityContextMenuContext;
@observable activeTab?: string; @observable activeTab?: string;
constructor(props: {}) {
super(props);
makeObservable(this);
}
async componentDidMount() { async componentDidMount() {
this.contextMenu = { this.contextMenu = {
menuItems: [], menuItems: [],

View File

@ -2,7 +2,7 @@ import "./cluster-issues.scss";
import React from "react"; import React from "react";
import { observer } from "mobx-react"; import { observer } from "mobx-react";
import { computed } from "mobx"; import { computed, makeObservable } from "mobx";
import { Icon } from "../icon"; import { Icon } from "../icon";
import { SubHeader } from "../layout/sub-header"; import { SubHeader } from "../layout/sub-header";
import { Table, TableCell, TableHead, TableRow } from "../table"; import { Table, TableCell, TableHead, TableRow } from "../table";
@ -41,6 +41,11 @@ export class ClusterIssues extends React.Component<Props> {
[sortBy.age]: (warning: IWarning) => warning.timeDiffFromNow, [sortBy.age]: (warning: IWarning) => warning.timeDiffFromNow,
}; };
constructor(props: Props) {
super(props);
makeObservable(this);
}
@computed get warnings() { @computed get warnings() {
const warnings: IWarning[] = []; const warnings: IWarning[] = [];

View File

@ -1,4 +1,4 @@
import { action, observable, reaction, when } from "mobx"; import { action, observable, reaction, when, makeObservable } from "mobx";
import { KubeObjectStore } from "../../kube-object.store"; import { KubeObjectStore } from "../../kube-object.store";
import { Cluster, clusterApi, IClusterMetrics } from "../../api/endpoints"; import { Cluster, clusterApi, IClusterMetrics } from "../../api/endpoints";
import { autobind, createStorage } from "../../utils"; import { autobind, createStorage } from "../../utils";
@ -51,6 +51,7 @@ export class ClusterOverviewStore extends KubeObjectStore<Cluster> implements Cl
constructor() { constructor() {
super(); super();
makeObservable(this);
this.init(); this.init();
} }

View File

@ -1,7 +1,7 @@
import "./config-map-details.scss"; import "./config-map-details.scss";
import React from "react"; import React from "react";
import { autorun, observable } from "mobx"; import { autorun, observable, makeObservable } from "mobx";
import { disposeOnUnmount, observer } from "mobx-react"; import { disposeOnUnmount, observer } from "mobx-react";
import { DrawerTitle } from "../drawer"; import { DrawerTitle } from "../drawer";
import { Notifications } from "../notifications"; import { Notifications } from "../notifications";
@ -22,6 +22,11 @@ export class ConfigMapDetails extends React.Component<Props> {
@observable isSaving = false; @observable isSaving = false;
@observable data = observable.map(); @observable data = observable.map();
constructor(props: Props) {
super(props);
makeObservable(this);
}
async componentDidMount() { async componentDidMount() {
disposeOnUnmount(this, [ disposeOnUnmount(this, [
autorun(() => { autorun(() => {

View File

@ -1,7 +1,7 @@
import "./add-quota-dialog.scss"; import "./add-quota-dialog.scss";
import React from "react"; import React from "react";
import { computed, observable } from "mobx"; import { computed, observable, makeObservable } from "mobx";
import { observer } from "mobx-react"; import { observer } from "mobx-react";
import { Dialog, DialogProps } from "../dialog"; import { Dialog, DialogProps } from "../dialog";
import { Wizard, WizardStep } from "../wizard"; import { Wizard, WizardStep } from "../wizard";
@ -51,6 +51,11 @@ export class AddQuotaDialog extends React.Component<Props> {
@observable namespace = this.defaultNamespace; @observable namespace = this.defaultNamespace;
@observable quotas = AddQuotaDialog.defaultQuotas; @observable quotas = AddQuotaDialog.defaultQuotas;
constructor(props: Props) {
super(props);
makeObservable(this);
}
static open() { static open() {
AddQuotaDialog.isOpen = true; AddQuotaDialog.isOpen = true;
} }

View File

@ -1,7 +1,7 @@
import "./add-secret-dialog.scss"; import "./add-secret-dialog.scss";
import React from "react"; import React from "react";
import { observable } from "mobx"; import { observable, makeObservable } from "mobx";
import { observer } from "mobx-react"; import { observer } from "mobx-react";
import { Dialog, DialogProps } from "../dialog"; import { Dialog, DialogProps } from "../dialog";
import { Wizard, WizardStep } from "../wizard"; import { Wizard, WizardStep } from "../wizard";
@ -40,6 +40,11 @@ type ISecretField = keyof ISecretTemplate;
export class AddSecretDialog extends React.Component<Props> { export class AddSecretDialog extends React.Component<Props> {
@observable static isOpen = false; @observable static isOpen = false;
constructor(props: Props) {
super(props);
makeObservable(this);
}
static open() { static open() {
AddSecretDialog.isOpen = true; AddSecretDialog.isOpen = true;
} }

View File

@ -2,7 +2,7 @@ import "./secret-details.scss";
import React from "react"; import React from "react";
import isEmpty from "lodash/isEmpty"; import isEmpty from "lodash/isEmpty";
import { autorun, observable } from "mobx"; import { autorun, observable, makeObservable } from "mobx";
import { disposeOnUnmount, observer } from "mobx-react"; import { disposeOnUnmount, observer } from "mobx-react";
import { DrawerItem, DrawerTitle } from "../drawer"; import { DrawerItem, DrawerTitle } from "../drawer";
import { Input } from "../input"; import { Input } from "../input";
@ -25,6 +25,11 @@ export class SecretDetails extends React.Component<Props> {
@observable data: { [name: string]: string } = {}; @observable data: { [name: string]: string } = {};
@observable revealSecret: { [name: string]: boolean } = {}; @observable revealSecret: { [name: string]: boolean } = {};
constructor(props: Props) {
super(props);
makeObservable(this);
}
async componentDidMount() { async componentDidMount() {
disposeOnUnmount(this, [ disposeOnUnmount(this, [
autorun(() => { autorun(() => {

View File

@ -1,7 +1,7 @@
import "./crd-list.scss"; import "./crd-list.scss";
import React from "react"; import React from "react";
import { computed } from "mobx"; import { computed, makeObservable } from "mobx";
import { observer } from "mobx-react"; import { observer } from "mobx-react";
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
import { stopPropagation } from "../../utils"; import { stopPropagation } from "../../utils";
@ -27,6 +27,11 @@ enum columnId {
@observer @observer
export class CrdList extends React.Component { export class CrdList extends React.Component {
constructor(props: {}) {
super(props);
makeObservable(this);
}
get selectedGroups(): string[] { get selectedGroups(): string[] {
return crdGroupsUrlParam.get(); return crdGroupsUrlParam.get();
} }

View File

@ -3,7 +3,7 @@ import "./crd-resource-details.scss";
import React from "react"; import React from "react";
import jsonPath from "jsonpath"; import jsonPath from "jsonpath";
import { observer } from "mobx-react"; import { observer } from "mobx-react";
import { computed } from "mobx"; import { computed, makeObservable } from "mobx";
import { cssNames } from "../../utils"; import { cssNames } from "../../utils";
import { Badge } from "../badge"; import { Badge } from "../badge";
import { DrawerItem } from "../drawer"; import { DrawerItem } from "../drawer";
@ -39,6 +39,11 @@ function convertSpecValue(value: any): any {
@observer @observer
export class CrdResourceDetails extends React.Component<Props> { export class CrdResourceDetails extends React.Component<Props> {
constructor(props: Props) {
super(props);
makeObservable(this);
}
@computed get crd() { @computed get crd() {
return crdStore.getByObject(this.props.object); return crdStore.getByObject(this.props.object);
} }

View File

@ -7,7 +7,7 @@ import { RouteComponentProps } from "react-router";
import { KubeObjectListLayout } from "../kube-object"; import { KubeObjectListLayout } from "../kube-object";
import { KubeObject } from "../../api/kube-object"; import { KubeObject } from "../../api/kube-object";
import { ICRDRouteParams } from "./crd.route"; import { ICRDRouteParams } from "./crd.route";
import { autorun, computed } from "mobx"; import { autorun, computed, makeObservable } from "mobx";
import { crdStore } from "./crd.store"; import { crdStore } from "./crd.store";
import { TableSortCallback } from "../table"; import { TableSortCallback } from "../table";
import { apiManager } from "../../api/api-manager"; import { apiManager } from "../../api/api-manager";
@ -24,6 +24,11 @@ enum columnId {
@observer @observer
export class CrdResources extends React.Component<Props> { export class CrdResources extends React.Component<Props> {
constructor(props: Props) {
super(props);
makeObservable(this);
}
componentDidMount() { componentDidMount() {
disposeOnUnmount(this, [ disposeOnUnmount(this, [
autorun(() => { autorun(() => {

View File

@ -1,4 +1,4 @@
import { computed, reaction } from "mobx"; import { computed, reaction, makeObservable } from "mobx";
import { KubeObjectStore } from "../../kube-object.store"; import { KubeObjectStore } from "../../kube-object.store";
import { autobind } from "../../utils"; import { autobind } from "../../utils";
import { crdApi, CustomResourceDefinition } from "../../api/endpoints/crd.api"; import { crdApi, CustomResourceDefinition } from "../../api/endpoints/crd.api";
@ -25,6 +25,8 @@ export class CRDStore extends KubeObjectStore<CustomResourceDefinition> {
constructor() { constructor() {
super(); super();
makeObservable(this);
// auto-init stores for crd-s // auto-init stores for crd-s
reaction(() => this.items.toJSON(), items => items.forEach(initStore)); reaction(() => this.items.toJSON(), items => items.forEach(initStore));
} }

View File

@ -1,7 +1,7 @@
import "./entity-settings.scss"; import "./entity-settings.scss";
import React from "react"; import React from "react";
import { observable } from "mobx"; import { observable, makeObservable } from "mobx";
import { RouteComponentProps } from "react-router"; import { RouteComponentProps } from "react-router";
import { observer } from "mobx-react"; import { observer } from "mobx-react";
import { PageLayout } from "../layout/page-layout"; import { PageLayout } from "../layout/page-layout";
@ -19,6 +19,11 @@ interface Props extends RouteComponentProps<EntitySettingsRouteParams> {
export class EntitySettings extends React.Component<Props> { export class EntitySettings extends React.Component<Props> {
@observable activeTab: string; @observable activeTab: string;
constructor(props: Props) {
super(props);
makeObservable(this);
}
get entityId() { get entityId() {
return this.props.match.params.entityId; return this.props.match.params.entityId;
} }

View File

@ -1,7 +1,7 @@
import "./events.scss"; import "./events.scss";
import React, { Fragment } from "react"; import React, { Fragment } from "react";
import { computed, observable } from "mobx"; import { computed, observable, makeObservable } from "mobx";
import { observer } from "mobx-react"; import { observer } from "mobx-react";
import { orderBy } from "lodash"; import { orderBy } from "lodash";
import { TabLayout } from "../layout/tab-layout"; import { TabLayout } from "../layout/tab-layout";
@ -60,6 +60,11 @@ export class Events extends React.Component<Props> {
onSort: params => this.sorting = params, onSort: params => this.sorting = params,
}; };
constructor(props: Props) {
super(props);
makeObservable(this);
}
get store(): EventStore { get store(): EventStore {
return eventStore; return eventStore;
} }

View File

@ -1,7 +1,7 @@
import "./extensions.scss"; import "./extensions.scss";
import { remote, shell } from "electron"; import { remote, shell } from "electron";
import fse from "fs-extra"; import fse from "fs-extra";
import { computed, observable, reaction, when } from "mobx"; import { computed, observable, reaction, when, makeObservable } from "mobx";
import { disposeOnUnmount, observer } from "mobx-react"; import { disposeOnUnmount, observer } from "mobx-react";
import os from "os"; import os from "os";
import path from "path"; import path from "path";
@ -462,6 +462,11 @@ export class Extensions extends React.Component {
@observable search = ""; @observable search = "";
@observable installPath = ""; @observable installPath = "";
constructor(props: {}) {
super(props);
makeObservable(this);
}
@computed get searchedForExtensions() { @computed get searchedForExtensions() {
const searchText = this.search.toLowerCase(); const searchText = this.search.toLowerCase();

View File

@ -1,7 +1,7 @@
import "./add-namespace-dialog.scss"; import "./add-namespace-dialog.scss";
import React from "react"; import React from "react";
import { observable } from "mobx"; import { observable, makeObservable } from "mobx";
import { observer } from "mobx-react"; import { observer } from "mobx-react";
import { Dialog, DialogProps } from "../dialog"; import { Dialog, DialogProps } from "../dialog";
import { Wizard, WizardStep } from "../wizard"; import { Wizard, WizardStep } from "../wizard";
@ -21,6 +21,11 @@ export class AddNamespaceDialog extends React.Component<Props> {
@observable static isOpen = false; @observable static isOpen = false;
@observable namespace = ""; @observable namespace = "";
constructor(props: Props) {
super(props);
makeObservable(this);
}
static open() { static open() {
AddNamespaceDialog.isOpen = true; AddNamespaceDialog.isOpen = true;
} }

View File

@ -1,7 +1,7 @@
import "./namespace-details.scss"; import "./namespace-details.scss";
import React from "react"; import React from "react";
import { computed } from "mobx"; import { computed, makeObservable } from "mobx";
import { observer } from "mobx-react"; import { observer } from "mobx-react";
import { DrawerItem } from "../drawer"; import { DrawerItem } from "../drawer";
import { cssNames } from "../../utils"; import { cssNames } from "../../utils";
@ -19,6 +19,11 @@ interface Props extends KubeObjectDetailsProps<Namespace> {
@observer @observer
export class NamespaceDetails extends React.Component<Props> { export class NamespaceDetails extends React.Component<Props> {
constructor(props: Props) {
super(props);
makeObservable(this);
}
@computed get quotas() { @computed get quotas() {
const namespace = this.props.object.getName(); const namespace = this.props.object.getName();

View File

@ -1,7 +1,7 @@
import "./namespace-select.scss"; import "./namespace-select.scss";
import React from "react"; import React from "react";
import { computed } from "mobx"; import { computed, makeObservable } from "mobx";
import { disposeOnUnmount, observer } from "mobx-react"; import { disposeOnUnmount, observer } from "mobx-react";
import { Select, SelectOption, SelectProps } from "../select"; import { Select, SelectOption, SelectProps } from "../select";
import { cssNames } from "../../utils"; import { cssNames } from "../../utils";
@ -36,6 +36,11 @@ function GradientValueContainer<T>({children, ...rest}: ValueContainerProps<T>)
export class NamespaceSelect extends React.Component<Props> { export class NamespaceSelect extends React.Component<Props> {
static defaultProps = defaultProps as object; static defaultProps = defaultProps as object;
constructor(props: Props) {
super(props);
makeObservable(this);
}
componentDidMount() { componentDidMount() {
disposeOnUnmount(this, [ disposeOnUnmount(this, [
kubeWatchApi.subscribeStores([namespaceStore], { kubeWatchApi.subscribeStores([namespaceStore], {

View File

@ -1,4 +1,13 @@
import { action, comparer, computed, IReactionDisposer, IReactionOptions, observable, reaction } from "mobx"; import {
action,
comparer,
computed,
IReactionDisposer,
IReactionOptions,
observable,
reaction,
makeObservable,
} from "mobx";
import { autobind, createStorage } from "../../utils"; import { autobind, createStorage } from "../../utils";
import { KubeObjectStore, KubeObjectStoreLoadingParams } from "../../kube-object.store"; import { KubeObjectStore, KubeObjectStoreLoadingParams } from "../../kube-object.store";
import { Namespace, namespacesApi } from "../../api/endpoints/namespaces.api"; import { Namespace, namespacesApi } from "../../api/endpoints/namespaces.api";
@ -33,6 +42,7 @@ export class NamespaceStore extends KubeObjectStore<Namespace> {
constructor() { constructor() {
super(); super();
makeObservable(this);
this.init(); this.init();
} }

View File

@ -1,4 +1,4 @@
import { observable } from "mobx"; import { observable, makeObservable } from "mobx";
import { KubeObjectStore } from "../../kube-object.store"; import { KubeObjectStore } from "../../kube-object.store";
import { autobind } from "../../utils"; import { autobind } from "../../utils";
import { IIngressMetrics, Ingress, ingressApi } from "../../api/endpoints"; import { IIngressMetrics, Ingress, ingressApi } from "../../api/endpoints";
@ -9,6 +9,12 @@ export class IngressStore extends KubeObjectStore<Ingress> {
api = ingressApi; api = ingressApi;
@observable metrics: IIngressMetrics = null; @observable metrics: IIngressMetrics = null;
constructor() {
super();
makeObservable(this);
}
async loadMetrics(ingress: Ingress) { async loadMetrics(ingress: Ingress) {
this.metrics = await this.api.getMetrics(ingress.getName(), ingress.getNs()); this.metrics = await this.api.getMetrics(ingress.getName(), ingress.getNs());
} }

View File

@ -4,7 +4,7 @@ import React from "react";
import { observer } from "mobx-react"; import { observer } from "mobx-react";
import { Service, ServicePort } from "../../api/endpoints"; import { Service, ServicePort } from "../../api/endpoints";
import { apiBase } from "../../api"; import { apiBase } from "../../api";
import { observable } from "mobx"; import { observable, makeObservable } from "mobx";
import { cssNames } from "../../utils"; import { cssNames } from "../../utils";
import { Notifications } from "../notifications"; import { Notifications } from "../notifications";
import { Spinner } from "../spinner"; import { Spinner } from "../spinner";
@ -18,6 +18,11 @@ interface Props {
export class ServicePortComponent extends React.Component<Props> { export class ServicePortComponent extends React.Component<Props> {
@observable waiting = false; @observable waiting = false;
constructor(props: Props) {
super(props);
makeObservable(this);
}
async portForward() { async portForward() {
const { service, port } = this.props; const { service, port } = this.props;

View File

@ -1,5 +1,5 @@
import { sum } from "lodash"; import { sum } from "lodash";
import { action, computed, observable } from "mobx"; import { action, computed, observable, makeObservable } from "mobx";
import { clusterApi, IClusterMetrics, INodeMetrics, Node, nodesApi } from "../../api/endpoints"; import { clusterApi, IClusterMetrics, INodeMetrics, Node, nodesApi } from "../../api/endpoints";
import { autobind } from "../../utils"; import { autobind } from "../../utils";
import { KubeObjectStore } from "../../kube-object.store"; import { KubeObjectStore } from "../../kube-object.store";
@ -14,6 +14,12 @@ export class NodesStore extends KubeObjectStore<Node> {
@observable metricsLoading = false; @observable metricsLoading = false;
@observable metricsLoaded = false; @observable metricsLoaded = false;
constructor() {
super();
makeObservable(this);
}
@action @action
async loadUsageMetrics() { async loadUsageMetrics() {
this.metricsLoading = true; this.metricsLoading = true;

View File

@ -2,7 +2,7 @@ import "./add-helm-repo-dialog.scss";
import React from "react"; import React from "react";
import { remote, FileFilter } from "electron"; import { remote, FileFilter } from "electron";
import { observable } from "mobx"; import { observable, makeObservable } from "mobx";
import { observer } from "mobx-react"; import { observer } from "mobx-react";
import { Dialog, DialogProps } from "../dialog"; import { Dialog, DialogProps } from "../dialog";
import { Wizard, WizardStep } from "../wizard"; import { Wizard, WizardStep } from "../wizard";
@ -34,6 +34,11 @@ export class AddHelmRepoDialog extends React.Component<Props> {
@observable static isOpen = false; @observable static isOpen = false;
constructor(props: Props) {
super(props);
makeObservable(this);
}
static open() { static open() {
AddHelmRepoDialog.isOpen = true; AddHelmRepoDialog.isOpen = true;
} }

View File

@ -1,7 +1,7 @@
import "./helm-charts.scss"; import "./helm-charts.scss";
import React from "react"; import React from "react";
import { action, computed, observable } from "mobx"; import { action, computed, observable, makeObservable } from "mobx";
import { HelmRepo, HelmRepoManager } from "../../../main/helm/helm-repo-manager"; import { HelmRepo, HelmRepoManager } from "../../../main/helm/helm-repo-manager";
import { Button } from "../button"; import { Button } from "../button";
@ -17,6 +17,11 @@ export class HelmCharts extends React.Component {
@observable repos: HelmRepo[] = []; @observable repos: HelmRepo[] = [];
@observable addedRepos = observable.map<string, HelmRepo>(); @observable addedRepos = observable.map<string, HelmRepo>();
constructor(props: {}) {
super(props);
makeObservable(this);
}
@computed get options(): SelectOption<HelmRepo>[] { @computed get options(): SelectOption<HelmRepo>[] {
return this.repos.map(repo => ({ return this.repos.map(repo => ({
label: repo.name, label: repo.name,

View File

@ -2,7 +2,7 @@ import React from "react";
import { remote } from "electron"; import { remote } from "electron";
import { Avatar, IconButton, List, ListItem, ListItemAvatar, ListItemSecondaryAction, ListItemText, Paper } from "@material-ui/core"; import { Avatar, IconButton, List, ListItem, ListItemAvatar, ListItemSecondaryAction, ListItemText, Paper } from "@material-ui/core";
import { Description, Folder, Delete, HelpOutline } from "@material-ui/icons"; import { Description, Folder, Delete, HelpOutline } from "@material-ui/icons";
import { action, computed, observable, reaction } from "mobx"; import { action, computed, observable, reaction, makeObservable } from "mobx";
import { disposeOnUnmount, observer } from "mobx-react"; import { disposeOnUnmount, observer } from "mobx-react";
import fse from "fs-extra"; import fse from "fs-extra";
import { KubeconfigSyncEntry, KubeconfigSyncValue, UserStore } from "../../../common/user-store"; import { KubeconfigSyncEntry, KubeconfigSyncValue, UserStore } from "../../../common/user-store";
@ -53,6 +53,11 @@ export class KubeconfigSyncs extends React.Component {
syncs = observable.map<string, Value>(); syncs = observable.map<string, Value>();
@observable loaded = false; @observable loaded = false;
constructor(props: {}) {
super(props);
makeObservable(this);
}
async componentDidMount() { async componentDidMount() {
const mapEntries = await Promise.all( const mapEntries = await Promise.all(
iter.map( iter.map(

View File

@ -2,7 +2,7 @@ import "./preferences.scss";
import React from "react"; import React from "react";
import moment from "moment-timezone"; import moment from "moment-timezone";
import { computed, observable, reaction } from "mobx"; import { computed, observable, reaction, makeObservable } from "mobx";
import { disposeOnUnmount, observer } from "mobx-react"; import { disposeOnUnmount, observer } from "mobx-react";
import { isWindows } from "../../../common/vars"; import { isWindows } from "../../../common/vars";
@ -35,6 +35,11 @@ export class Preferences extends React.Component {
@observable shell = UserStore.getInstance().shell || ""; @observable shell = UserStore.getInstance().shell || "";
@observable activeTab = Pages.Application; @observable activeTab = Pages.Application;
constructor(props: {}) {
super(props);
makeObservable(this);
}
@computed get themeOptions(): SelectOption<string>[] { @computed get themeOptions(): SelectOption<string>[] {
return ThemeStore.getInstance().themes.map(theme => ({ return ThemeStore.getInstance().themes.map(theme => ({
label: theme.name, label: theme.name,

View File

@ -1,4 +1,4 @@
import { action, observable } from "mobx"; import { action, observable, makeObservable } from "mobx";
import { KubeObjectStore } from "../../kube-object.store"; import { KubeObjectStore } from "../../kube-object.store";
import { autobind } from "../../utils"; import { autobind } from "../../utils";
import { IPvcMetrics, PersistentVolumeClaim, pvcApi } from "../../api/endpoints"; import { IPvcMetrics, PersistentVolumeClaim, pvcApi } from "../../api/endpoints";
@ -9,6 +9,12 @@ export class VolumeClaimStore extends KubeObjectStore<PersistentVolumeClaim> {
api = pvcApi; api = pvcApi;
@observable metrics: IPvcMetrics = null; @observable metrics: IPvcMetrics = null;
constructor() {
super();
makeObservable(this);
}
@action @action
async loadMetrics(pvc: PersistentVolumeClaim) { async loadMetrics(pvc: PersistentVolumeClaim) {
this.metrics = await pvcApi.getMetrics(pvc.getName(), pvc.getNs()); this.metrics = await pvcApi.getMetrics(pvc.getName(), pvc.getNs());

View File

@ -1,7 +1,7 @@
import "./add-role-binding-dialog.scss"; import "./add-role-binding-dialog.scss";
import React from "react"; import React from "react";
import { computed, observable } from "mobx"; import { computed, observable, makeObservable } from "mobx";
import { observer } from "mobx-react"; import { observer } from "mobx-react";
import { Dialog, DialogProps } from "../dialog"; import { Dialog, DialogProps } from "../dialog";
import { Wizard, WizardStep } from "../wizard"; import { Wizard, WizardStep } from "../wizard";
@ -35,6 +35,11 @@ export class AddRoleBindingDialog extends React.Component<Props> {
@observable static isOpen = false; @observable static isOpen = false;
@observable static data: RoleBinding = null; @observable static data: RoleBinding = null;
constructor(props: Props) {
super(props);
makeObservable(this);
}
static open(roleBinding?: RoleBinding) { static open(roleBinding?: RoleBinding) {
AddRoleBindingDialog.isOpen = true; AddRoleBindingDialog.isOpen = true;
AddRoleBindingDialog.data = roleBinding; AddRoleBindingDialog.data = roleBinding;

View File

@ -9,7 +9,7 @@ import { ConfirmDialog } from "../confirm-dialog";
import { DrawerTitle } from "../drawer"; import { DrawerTitle } from "../drawer";
import { KubeEventDetails } from "../+events/kube-event-details"; import { KubeEventDetails } from "../+events/kube-event-details";
import { disposeOnUnmount, observer } from "mobx-react"; import { disposeOnUnmount, observer } from "mobx-react";
import { observable, reaction } from "mobx"; import { observable, reaction, makeObservable } from "mobx";
import { roleBindingsStore } from "./role-bindings.store"; import { roleBindingsStore } from "./role-bindings.store";
import { AddRoleBindingDialog } from "./add-role-binding-dialog"; import { AddRoleBindingDialog } from "./add-role-binding-dialog";
import { KubeObjectDetailsProps } from "../kube-object"; import { KubeObjectDetailsProps } from "../kube-object";
@ -23,6 +23,11 @@ interface Props extends KubeObjectDetailsProps<RoleBinding> {
export class RoleBindingDetails extends React.Component<Props> { export class RoleBindingDetails extends React.Component<Props> {
@observable selectedSubjects = observable.array<IRoleBindingSubject>([], { deep: false }); @observable selectedSubjects = observable.array<IRoleBindingSubject>([], { deep: false });
constructor(props: Props) {
super(props);
makeObservable(this);
}
async componentDidMount() { async componentDidMount() {
disposeOnUnmount(this, [ disposeOnUnmount(this, [
reaction(() => this.props.object, () => { reaction(() => this.props.object, () => {

View File

@ -1,7 +1,7 @@
import "./add-role-dialog.scss"; import "./add-role-dialog.scss";
import React from "react"; import React from "react";
import { observable } from "mobx"; import { observable, makeObservable } from "mobx";
import { observer } from "mobx-react"; import { observer } from "mobx-react";
import { Dialog, DialogProps } from "../dialog"; import { Dialog, DialogProps } from "../dialog";
import { Wizard, WizardStep } from "../wizard"; import { Wizard, WizardStep } from "../wizard";
@ -22,6 +22,11 @@ export class AddRoleDialog extends React.Component<Props> {
@observable roleName = ""; @observable roleName = "";
@observable namespace = ""; @observable namespace = "";
constructor(props: Props) {
super(props);
makeObservable(this);
}
static open() { static open() {
AddRoleDialog.isOpen = true; AddRoleDialog.isOpen = true;
} }

View File

@ -1,7 +1,7 @@
import "./create-service-account-dialog.scss"; import "./create-service-account-dialog.scss";
import React from "react"; import React from "react";
import { observable } from "mobx"; import { observable, makeObservable } from "mobx";
import { observer } from "mobx-react"; import { observer } from "mobx-react";
import { Dialog, DialogProps } from "../dialog"; import { Dialog, DialogProps } from "../dialog";
import { Wizard, WizardStep } from "../wizard"; import { Wizard, WizardStep } from "../wizard";
@ -23,6 +23,11 @@ export class CreateServiceAccountDialog extends React.Component<Props> {
@observable name = ""; @observable name = "";
@observable namespace = "default"; @observable namespace = "default";
constructor(props: Props) {
super(props);
makeObservable(this);
}
static open() { static open() {
CreateServiceAccountDialog.isOpen = true; CreateServiceAccountDialog.isOpen = true;
} }

View File

@ -1,7 +1,7 @@
import "./service-accounts-details.scss"; import "./service-accounts-details.scss";
import React from "react"; import React from "react";
import { autorun, observable } from "mobx"; import { autorun, observable, makeObservable } from "mobx";
import { Spinner } from "../spinner"; import { Spinner } from "../spinner";
import { ServiceAccountsSecret } from "./service-accounts-secret"; import { ServiceAccountsSecret } from "./service-accounts-secret";
import { DrawerItem, DrawerTitle } from "../drawer"; import { DrawerItem, DrawerTitle } from "../drawer";
@ -45,6 +45,11 @@ export class ServiceAccountsDetails extends React.Component<Props> {
this.imagePullSecrets = await Promise.all(imagePullSecrets); this.imagePullSecrets = await Promise.all(imagePullSecrets);
}); });
constructor(props: Props) {
super(props);
makeObservable(this);
}
renderSecrets() { renderSecrets() {
const { secrets } = this; const { secrets } = this;

View File

@ -1,7 +1,7 @@
import "./cronjob-trigger-dialog.scss"; import "./cronjob-trigger-dialog.scss";
import React, { Component } from "react"; import React, { Component } from "react";
import { observable } from "mobx"; import { observable, makeObservable } from "mobx";
import { observer } from "mobx-react"; import { observer } from "mobx-react";
import { Dialog, DialogProps } from "../dialog"; import { Dialog, DialogProps } from "../dialog";
import { Wizard, WizardStep } from "../wizard"; import { Wizard, WizardStep } from "../wizard";
@ -23,6 +23,11 @@ export class CronJobTriggerDialog extends Component<Props> {
@observable ready = false; @observable ready = false;
constructor(props: Props) {
super(props);
makeObservable(this);
}
static open(cronjob: CronJob) { static open(cronjob: CronJob) {
CronJobTriggerDialog.isOpen = true; CronJobTriggerDialog.isOpen = true;
CronJobTriggerDialog.data = cronjob; CronJobTriggerDialog.data = cronjob;

View File

@ -1,4 +1,4 @@
import { observable } from "mobx"; import { observable, makeObservable } from "mobx";
import { KubeObjectStore } from "../../kube-object.store"; import { KubeObjectStore } from "../../kube-object.store";
import { autobind } from "../../utils"; import { autobind } from "../../utils";
import { DaemonSet, daemonSetApi, IPodMetrics, Pod, podsApi, PodStatus } from "../../api/endpoints"; import { DaemonSet, daemonSetApi, IPodMetrics, Pod, podsApi, PodStatus } from "../../api/endpoints";
@ -11,6 +11,12 @@ export class DaemonSetStore extends KubeObjectStore<DaemonSet> {
@observable metrics: IPodMetrics = null; @observable metrics: IPodMetrics = null;
constructor() {
super();
makeObservable(this);
}
async loadMetrics(daemonSet: DaemonSet) { async loadMetrics(daemonSet: DaemonSet) {
const pods = this.getChildPods(daemonSet); const pods = this.getChildPods(daemonSet);

View File

@ -1,7 +1,7 @@
import "./deployment-scale-dialog.scss"; import "./deployment-scale-dialog.scss";
import React, { Component } from "react"; import React, { Component } from "react";
import { computed, observable } from "mobx"; import { computed, observable, makeObservable } from "mobx";
import { observer } from "mobx-react"; import { observer } from "mobx-react";
import { Dialog, DialogProps } from "../dialog"; import { Dialog, DialogProps } from "../dialog";
import { Wizard, WizardStep } from "../wizard"; import { Wizard, WizardStep } from "../wizard";
@ -23,6 +23,11 @@ export class DeploymentScaleDialog extends Component<Props> {
@observable currentReplicas = 0; @observable currentReplicas = 0;
@observable desiredReplicas = 0; @observable desiredReplicas = 0;
constructor(props: Props) {
super(props);
makeObservable(this);
}
static open(deployment: Deployment) { static open(deployment: Deployment) {
DeploymentScaleDialog.isOpen = true; DeploymentScaleDialog.isOpen = true;
DeploymentScaleDialog.data = deployment; DeploymentScaleDialog.data = deployment;

View File

@ -1,4 +1,4 @@
import { observable } from "mobx"; import { observable, makeObservable } from "mobx";
import { Deployment, deploymentApi, IPodMetrics, podsApi, PodStatus } from "../../api/endpoints"; import { Deployment, deploymentApi, IPodMetrics, podsApi, PodStatus } from "../../api/endpoints";
import { KubeObjectStore } from "../../kube-object.store"; import { KubeObjectStore } from "../../kube-object.store";
import { autobind } from "../../utils"; import { autobind } from "../../utils";
@ -10,6 +10,12 @@ export class DeploymentStore extends KubeObjectStore<Deployment> {
api = deploymentApi; api = deploymentApi;
@observable metrics: IPodMetrics = null; @observable metrics: IPodMetrics = null;
constructor() {
super();
makeObservable(this);
}
protected sortItems(items: Deployment[]) { protected sortItems(items: Deployment[]) {
return super.sortItems(items, [ return super.sortItems(items, [
item => item.getReplicas(), item => item.getReplicas(),

View File

@ -3,7 +3,7 @@ import "./overview-workload-status.scss";
import React from "react"; import React from "react";
import capitalize from "lodash/capitalize"; import capitalize from "lodash/capitalize";
import { findDOMNode } from "react-dom"; import { findDOMNode } from "react-dom";
import { observable } from "mobx"; import { observable, makeObservable } from "mobx";
import { observer } from "mobx-react"; import { observer } from "mobx-react";
import { PieChart } from "../chart"; import { PieChart } from "../chart";
import { cssVar } from "../../utils"; import { cssVar } from "../../utils";
@ -24,6 +24,11 @@ interface Props {
export class OverviewWorkloadStatus extends React.Component<Props> { export class OverviewWorkloadStatus extends React.Component<Props> {
@observable elem: HTMLElement; @observable elem: HTMLElement;
constructor(props: Props) {
super(props);
makeObservable(this);
}
componentDidMount() { componentDidMount() {
// eslint-disable-next-line react/no-find-dom-node // eslint-disable-next-line react/no-find-dom-node
this.elem = findDOMNode(this) as HTMLElement; this.elem = findDOMNode(this) as HTMLElement;

View File

@ -4,7 +4,7 @@ import React from "react";
import { observer } from "mobx-react"; import { observer } from "mobx-react";
import { Pod } from "../../api/endpoints"; import { Pod } from "../../api/endpoints";
import { apiBase } from "../../api"; import { apiBase } from "../../api";
import { observable } from "mobx"; import { observable, makeObservable } from "mobx";
import { cssNames } from "../../utils"; import { cssNames } from "../../utils";
import { Notifications } from "../notifications"; import { Notifications } from "../notifications";
import { Spinner } from "../spinner"; import { Spinner } from "../spinner";
@ -22,6 +22,11 @@ interface Props {
export class PodContainerPort extends React.Component<Props> { export class PodContainerPort extends React.Component<Props> {
@observable waiting = false; @observable waiting = false;
constructor(props: Props) {
super(props);
makeObservable(this);
}
async portForward() { async portForward() {
const { pod, port } = this.props; const { pod, port } = this.props;

View File

@ -2,7 +2,7 @@ import "./pod-details-list.scss";
import React from "react"; import React from "react";
import kebabCase from "lodash/kebabCase"; import kebabCase from "lodash/kebabCase";
import { reaction } from "mobx"; import { reaction, makeObservable } from "mobx";
import { disposeOnUnmount, observer } from "mobx-react"; import { disposeOnUnmount, observer } from "mobx-react";
import { podsStore } from "./pods.store"; import { podsStore } from "./pods.store";
import { Pod } from "../../api/endpoints"; import { Pod } from "../../api/endpoints";
@ -50,6 +50,11 @@ export class PodDetailsList extends React.Component<Props> {
[sortBy.memory]: (pod: Pod) => podsStore.getPodKubeMetrics(pod).memory, [sortBy.memory]: (pod: Pod) => podsStore.getPodKubeMetrics(pod).memory,
}; };
constructor(props: Props) {
super(props);
makeObservable(this);
}
componentDidMount() { componentDidMount() {
this.metricsWatcher.start(true); this.metricsWatcher.start(true);
disposeOnUnmount(this, [ disposeOnUnmount(this, [

View File

@ -2,7 +2,7 @@ import "./pod-details-secrets.scss";
import React, { Component } from "react"; import React, { Component } from "react";
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
import { autorun, observable } from "mobx"; import { autorun, observable, makeObservable } from "mobx";
import { disposeOnUnmount, observer } from "mobx-react"; import { disposeOnUnmount, observer } from "mobx-react";
import { Pod, Secret, secretsApi } from "../../api/endpoints"; import { Pod, Secret, secretsApi } from "../../api/endpoints";
import { getDetailsUrl } from "../kube-object"; import { getDetailsUrl } from "../kube-object";
@ -29,6 +29,11 @@ export class PodDetailsSecrets extends Component<Props> {
secrets.forEach(secret => secret && this.secrets.set(secret.getName(), secret)); secrets.forEach(secret => secret && this.secrets.set(secret.getName(), secret));
}); });
constructor(props: Props) {
super(props);
makeObservable(this);
}
render() { render() {
const { pod } = this.props; const { pod } = this.props;

View File

@ -4,7 +4,7 @@ import React from "react";
import kebabCase from "lodash/kebabCase"; import kebabCase from "lodash/kebabCase";
import { disposeOnUnmount, observer } from "mobx-react"; import { disposeOnUnmount, observer } from "mobx-react";
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
import { autorun, observable, reaction, toJS } from "mobx"; import { autorun, observable, reaction, toJS, makeObservable } from "mobx";
import { IPodMetrics, nodesApi, Pod, pvcApi, configMapApi } from "../../api/endpoints"; import { IPodMetrics, nodesApi, Pod, pvcApi, configMapApi } from "../../api/endpoints";
import { DrawerItem, DrawerTitle } from "../drawer"; import { DrawerItem, DrawerTitle } from "../drawer";
import { Badge } from "../badge"; import { Badge } from "../badge";
@ -34,6 +34,11 @@ export class PodDetails extends React.Component<Props> {
private watcher = interval(60, () => this.loadMetrics()); private watcher = interval(60, () => this.loadMetrics());
constructor(props: Props) {
super(props);
makeObservable(this);
}
componentDidMount() { componentDidMount() {
disposeOnUnmount(this, [ disposeOnUnmount(this, [
autorun(() => { autorun(() => {

View File

@ -1,5 +1,5 @@
import countBy from "lodash/countBy"; import countBy from "lodash/countBy";
import { action, observable } from "mobx"; import { action, observable, makeObservable } from "mobx";
import { KubeObjectStore } from "../../kube-object.store"; import { KubeObjectStore } from "../../kube-object.store";
import { autobind, cpuUnitsToNumber, unitsToBytes } from "../../utils"; import { autobind, cpuUnitsToNumber, unitsToBytes } from "../../utils";
import { IPodMetrics, Pod, PodMetrics, podMetricsApi, podsApi } from "../../api/endpoints"; import { IPodMetrics, Pod, PodMetrics, podMetricsApi, podsApi } from "../../api/endpoints";
@ -13,6 +13,12 @@ export class PodsStore extends KubeObjectStore<Pod> {
@observable metrics: IPodMetrics = null; @observable metrics: IPodMetrics = null;
@observable kubeMetrics = observable.array<PodMetrics>([]); @observable kubeMetrics = observable.array<PodMetrics>([]);
constructor() {
super();
makeObservable(this);
}
@action @action
async loadMetrics(pod: Pod) { async loadMetrics(pod: Pod) {
this.metrics = await podsApi.getMetrics([pod], pod.getNs()); this.metrics = await podsApi.getMetrics([pod], pod.getNs());

View File

@ -1,7 +1,7 @@
import "./replicaset-scale-dialog.scss"; import "./replicaset-scale-dialog.scss";
import React, { Component } from "react"; import React, { Component } from "react";
import { computed, observable } from "mobx"; import { computed, observable, makeObservable } from "mobx";
import { observer } from "mobx-react"; import { observer } from "mobx-react";
import { Dialog, DialogProps } from "../dialog"; import { Dialog, DialogProps } from "../dialog";
import { Wizard, WizardStep } from "../wizard"; import { Wizard, WizardStep } from "../wizard";
@ -23,6 +23,11 @@ export class ReplicaSetScaleDialog extends Component<Props> {
@observable currentReplicas = 0; @observable currentReplicas = 0;
@observable desiredReplicas = 0; @observable desiredReplicas = 0;
constructor(props: Props) {
super(props);
makeObservable(this);
}
static open(replicaSet: ReplicaSet) { static open(replicaSet: ReplicaSet) {
ReplicaSetScaleDialog.isOpen = true; ReplicaSetScaleDialog.isOpen = true;
ReplicaSetScaleDialog.data = replicaSet; ReplicaSetScaleDialog.data = replicaSet;

View File

@ -1,4 +1,4 @@
import { observable } from "mobx"; import { observable, makeObservable } from "mobx";
import { autobind } from "../../utils"; import { autobind } from "../../utils";
import { KubeObjectStore } from "../../kube-object.store"; import { KubeObjectStore } from "../../kube-object.store";
import { Deployment, IPodMetrics, podsApi, ReplicaSet, replicaSetApi } from "../../api/endpoints"; import { Deployment, IPodMetrics, podsApi, ReplicaSet, replicaSetApi } from "../../api/endpoints";
@ -11,6 +11,12 @@ export class ReplicaSetStore extends KubeObjectStore<ReplicaSet> {
api = replicaSetApi; api = replicaSetApi;
@observable metrics: IPodMetrics = null; @observable metrics: IPodMetrics = null;
constructor() {
super();
makeObservable(this);
}
async loadMetrics(replicaSet: ReplicaSet) { async loadMetrics(replicaSet: ReplicaSet) {
const pods = this.getChildPods(replicaSet); const pods = this.getChildPods(replicaSet);

View File

@ -2,7 +2,7 @@ import "./statefulset-scale-dialog.scss";
import { StatefulSet, statefulSetApi } from "../../api/endpoints"; import { StatefulSet, statefulSetApi } from "../../api/endpoints";
import React, { Component } from "react"; import React, { Component } from "react";
import { computed, observable } from "mobx"; import { computed, observable, makeObservable } from "mobx";
import { observer } from "mobx-react"; import { observer } from "mobx-react";
import { Dialog, DialogProps } from "../dialog"; import { Dialog, DialogProps } from "../dialog";
import { Wizard, WizardStep } from "../wizard"; import { Wizard, WizardStep } from "../wizard";
@ -23,6 +23,11 @@ export class StatefulSetScaleDialog extends Component<Props> {
@observable currentReplicas = 0; @observable currentReplicas = 0;
@observable desiredReplicas = 0; @observable desiredReplicas = 0;
constructor(props: Props) {
super(props);
makeObservable(this);
}
static open(statefulSet: StatefulSet) { static open(statefulSet: StatefulSet) {
StatefulSetScaleDialog.isOpen = true; StatefulSetScaleDialog.isOpen = true;
StatefulSetScaleDialog.data = statefulSet; StatefulSetScaleDialog.data = statefulSet;

View File

@ -1,4 +1,4 @@
import { observable } from "mobx"; import { observable, makeObservable } from "mobx";
import { autobind } from "../../utils"; import { autobind } from "../../utils";
import { KubeObjectStore } from "../../kube-object.store"; import { KubeObjectStore } from "../../kube-object.store";
import { IPodMetrics, podsApi, PodStatus, StatefulSet, statefulSetApi } from "../../api/endpoints"; import { IPodMetrics, podsApi, PodStatus, StatefulSet, statefulSetApi } from "../../api/endpoints";
@ -10,6 +10,12 @@ export class StatefulSetStore extends KubeObjectStore<StatefulSet> {
api = statefulSetApi; api = statefulSetApi;
@observable metrics: IPodMetrics = null; @observable metrics: IPodMetrics = null;
constructor() {
super();
makeObservable(this);
}
async loadMetrics(statefulSet: StatefulSet) { async loadMetrics(statefulSet: StatefulSet) {
const pods = this.getChildPods(statefulSet); const pods = this.getChildPods(statefulSet);

View File

@ -1,6 +1,6 @@
import "./animate.scss"; import "./animate.scss";
import React from "react"; import React from "react";
import { observable, reaction } from "mobx"; import { observable, reaction, makeObservable } from "mobx";
import { disposeOnUnmount, observer } from "mobx-react"; import { disposeOnUnmount, observer } from "mobx-react";
import { autobind, cssNames, noop } from "../../utils"; import { autobind, cssNames, noop } from "../../utils";
@ -30,6 +30,11 @@ export class Animate extends React.Component<AnimateProps> {
leave: false leave: false
}; };
constructor(props: AnimateProps) {
super(props);
makeObservable(this);
}
get contentElem() { get contentElem() {
return React.Children.only(this.props.children) as React.ReactElement<React.HTMLAttributes<any>>; return React.Children.only(this.props.children) as React.ReactElement<React.HTMLAttributes<any>>;
} }

View File

@ -1,5 +1,5 @@
import React from "react"; import React from "react";
import { observable } from "mobx"; import { observable, makeObservable } from "mobx";
import { disposeOnUnmount, observer } from "mobx-react"; import { disposeOnUnmount, observer } from "mobx-react";
import { Redirect, Route, Router, Switch } from "react-router"; import { Redirect, Route, Router, Switch } from "react-router";
import { history } from "../navigation"; import { history } from "../navigation";
@ -53,6 +53,11 @@ import { clusterContext } from "./context";
@observer @observer
export class App extends React.Component { export class App extends React.Component {
constructor(props: {}) {
super(props);
makeObservable(this);
}
static async init() { static async init() {
const frameId = webFrame.routingId; const frameId = webFrame.routingId;
const clusterId = getHostedClusterId(); const clusterId = getHostedClusterId();

View File

@ -4,7 +4,7 @@ import "./cluster-status.scss";
import React from "react"; import React from "react";
import { observer } from "mobx-react"; import { observer } from "mobx-react";
import { ipcRenderer } from "electron"; import { ipcRenderer } from "electron";
import { computed, observable } from "mobx"; import { computed, observable, makeObservable } from "mobx";
import { requestMain, subscribeToBroadcast } from "../../../common/ipc"; import { requestMain, subscribeToBroadcast } from "../../../common/ipc";
import { Icon } from "../icon"; import { Icon } from "../icon";
import { Button } from "../button"; import { Button } from "../button";
@ -24,6 +24,11 @@ export class ClusterStatus extends React.Component<Props> {
@observable authOutput: KubeAuthProxyLog[] = []; @observable authOutput: KubeAuthProxyLog[] = [];
@observable isReconnecting = false; @observable isReconnecting = false;
constructor(props: Props) {
super(props);
makeObservable(this);
}
get cluster(): Cluster { get cluster(): Cluster {
return ClusterStore.getInstance().getById(this.props.clusterId); return ClusterStore.getInstance().getById(this.props.clusterId);
} }

View File

@ -3,7 +3,7 @@ import { observer } from "mobx-react";
import { Cluster } from "../../../../main/cluster"; import { Cluster } from "../../../../main/cluster";
import { SubTitle } from "../../layout/sub-title"; import { SubTitle } from "../../layout/sub-title";
import { EditableList } from "../../editable-list"; import { EditableList } from "../../editable-list";
import { observable } from "mobx"; import { observable, makeObservable } from "mobx";
interface Props { interface Props {
cluster: Cluster; cluster: Cluster;
@ -13,6 +13,11 @@ interface Props {
export class ClusterAccessibleNamespaces extends React.Component<Props> { export class ClusterAccessibleNamespaces extends React.Component<Props> {
@observable namespaces = new Set(this.props.cluster.accessibleNamespaces); @observable namespaces = new Set(this.props.cluster.accessibleNamespaces);
constructor(props: Props) {
super(props);
makeObservable(this);
}
render() { render() {
return ( return (
<> <>

View File

@ -1,5 +1,5 @@
import React from "react"; import React from "react";
import { observable, autorun } from "mobx"; import { observable, autorun, makeObservable } from "mobx";
import { observer, disposeOnUnmount } from "mobx-react"; import { observer, disposeOnUnmount } from "mobx-react";
import { Cluster } from "../../../../main/cluster"; import { Cluster } from "../../../../main/cluster";
import { Input } from "../../input"; import { Input } from "../../input";
@ -13,6 +13,11 @@ interface Props {
export class ClusterHomeDirSetting extends React.Component<Props> { export class ClusterHomeDirSetting extends React.Component<Props> {
@observable directory = ""; @observable directory = "";
constructor(props: Props) {
super(props);
makeObservable(this);
}
componentDidMount() { componentDidMount() {
disposeOnUnmount(this, disposeOnUnmount(this,
autorun(() => { autorun(() => {

View File

@ -7,7 +7,7 @@ import { Icon } from "../../icon/icon";
import { Button } from "../../button/button"; import { Button } from "../../button/button";
import { SubTitle } from "../../layout/sub-title"; import { SubTitle } from "../../layout/sub-title";
import { Cluster } from "../../../../main/cluster"; import { Cluster } from "../../../../main/cluster";
import { observable, reaction } from "mobx"; import { observable, reaction, makeObservable } from "mobx";
interface Props { interface Props {
cluster: Cluster; cluster: Cluster;
@ -30,6 +30,11 @@ export enum ResourceType {
export class ClusterMetricsSetting extends React.Component<Props> { export class ClusterMetricsSetting extends React.Component<Props> {
@observable hiddenMetrics = observable.set<string>(); @observable hiddenMetrics = observable.set<string>();
constructor(props: Props) {
super(props);
makeObservable(this);
}
componentDidMount() { componentDidMount() {
this.hiddenMetrics = observable.set<string>(this.props.cluster.preferences.hiddenMetrics ?? []); this.hiddenMetrics = observable.set<string>(this.props.cluster.preferences.hiddenMetrics ?? []);

View File

@ -1,7 +1,7 @@
import React from "react"; import React from "react";
import { Cluster } from "../../../../main/cluster"; import { Cluster } from "../../../../main/cluster";
import { Input } from "../../input"; import { Input } from "../../input";
import { observable, autorun } from "mobx"; import { observable, autorun, makeObservable } from "mobx";
import { observer, disposeOnUnmount } from "mobx-react"; import { observer, disposeOnUnmount } from "mobx-react";
import { SubTitle } from "../../layout/sub-title"; import { SubTitle } from "../../layout/sub-title";
import { isRequired } from "../../input/input_validators"; import { isRequired } from "../../input/input_validators";
@ -14,6 +14,11 @@ interface Props {
export class ClusterNameSetting extends React.Component<Props> { export class ClusterNameSetting extends React.Component<Props> {
@observable name = ""; @observable name = "";
constructor(props: Props) {
super(props);
makeObservable(this);
}
componentDidMount() { componentDidMount() {
disposeOnUnmount(this, disposeOnUnmount(this,
autorun(() => { autorun(() => {

View File

@ -5,7 +5,7 @@ import { Cluster } from "../../../../main/cluster";
import { SubTitle } from "../../layout/sub-title"; import { SubTitle } from "../../layout/sub-title";
import { Select, SelectOption } from "../../select"; import { Select, SelectOption } from "../../select";
import { Input } from "../../input"; import { Input } from "../../input";
import { observable, computed, autorun } from "mobx"; import { observable, computed, autorun, makeObservable } from "mobx";
const options: SelectOption<string>[] = [ const options: SelectOption<string>[] = [
{ value: "", label: "Auto detect" }, { value: "", label: "Auto detect" },
@ -21,6 +21,11 @@ export class ClusterPrometheusSetting extends React.Component<Props> {
@observable path = ""; @observable path = "";
@observable provider = ""; @observable provider = "";
constructor(props: Props) {
super(props);
makeObservable(this);
}
@computed get canEditPrometheusPath() { @computed get canEditPrometheusPath() {
if (this.provider === "" || this.provider === "lens") return false; if (this.provider === "" || this.provider === "lens") return false;

View File

@ -1,5 +1,5 @@
import React from "react"; import React from "react";
import { observable, autorun } from "mobx"; import { observable, autorun, makeObservable } from "mobx";
import { observer, disposeOnUnmount } from "mobx-react"; import { observer, disposeOnUnmount } from "mobx-react";
import { Cluster } from "../../../../main/cluster"; import { Cluster } from "../../../../main/cluster";
import { Input, InputValidators } from "../../input"; import { Input, InputValidators } from "../../input";
@ -13,6 +13,11 @@ interface Props {
export class ClusterProxySetting extends React.Component<Props> { export class ClusterProxySetting extends React.Component<Props> {
@observable proxy = ""; @observable proxy = "";
constructor(props: Props) {
super(props);
makeObservable(this);
}
componentDidMount() { componentDidMount() {
disposeOnUnmount(this, disposeOnUnmount(this,
autorun(() => { autorun(() => {

View File

@ -12,6 +12,11 @@ interface Props {
@observer @observer
export class RemoveClusterButton extends React.Component<Props> { export class RemoveClusterButton extends React.Component<Props> {
constructor(props: Props) {
super(props);
makeObservable(this);
}
@autobind() @autobind()
confirmRemoveCluster() { confirmRemoveCluster() {
const { cluster } = this.props; const { cluster } = this.props;

View File

@ -3,7 +3,7 @@ import "./cluster-metrics-setting.scss";
import React from "react"; import React from "react";
import { disposeOnUnmount, observer } from "mobx-react"; import { disposeOnUnmount, observer } from "mobx-react";
import { Cluster } from "../../../../main/cluster"; import { Cluster } from "../../../../main/cluster";
import { observable, reaction } from "mobx"; import { observable, reaction, makeObservable } from "mobx";
import { Badge } from "../../badge/badge"; import { Badge } from "../../badge/badge";
import { Icon } from "../../icon/icon"; import { Icon } from "../../icon/icon";
@ -15,6 +15,11 @@ interface Props {
export class ShowMetricsSetting extends React.Component<Props> { export class ShowMetricsSetting extends React.Component<Props> {
@observable hiddenMetrics = observable.set<string>(); @observable hiddenMetrics = observable.set<string>();
constructor(props: Props) {
super(props);
makeObservable(this);
}
componentDidMount() { componentDidMount() {
this.hiddenMetrics = observable.set<string>(this.props.cluster.preferences.hiddenMetrics ?? []); this.hiddenMetrics = observable.set<string>(this.props.cluster.preferences.hiddenMetrics ?? []);

View File

@ -1,6 +1,6 @@
import "./command-container.scss"; import "./command-container.scss";
import { action, observable } from "mobx"; import { action, observable, makeObservable } from "mobx";
import { observer } from "mobx-react"; import { observer } from "mobx-react";
import React from "react"; import React from "react";
import { Dialog } from "../dialog"; import { Dialog } from "../dialog";
@ -29,6 +29,11 @@ export class CommandOverlay {
export class CommandContainer extends React.Component<{ clusterId?: string }> { export class CommandContainer extends React.Component<{ clusterId?: string }> {
@observable.ref commandComponent: React.ReactElement; @observable.ref commandComponent: React.ReactElement;
constructor(props: { clusterId?: string }) {
super(props);
makeObservable(this);
}
private escHandler(event: KeyboardEvent) { private escHandler(event: KeyboardEvent) {
if (event.key === "Escape") { if (event.key === "Escape") {
event.stopPropagation(); event.stopPropagation();

View File

@ -1,6 +1,6 @@
import { Select } from "../select"; import { Select } from "../select";
import { computed, observable, toJS } from "mobx"; import { computed, observable, toJS, makeObservable } from "mobx";
import { observer } from "mobx-react"; import { observer } from "mobx-react";
import React from "react"; import React from "react";
import { commandRegistry } from "../../../extensions/registries/command-registry"; import { commandRegistry } from "../../../extensions/registries/command-registry";
@ -14,6 +14,11 @@ import { clusterViewURL } from "../cluster-manager/cluster-view.route";
export class CommandDialog extends React.Component { export class CommandDialog extends React.Component {
@observable menuIsOpen = true; @observable menuIsOpen = true;
constructor(props: {}) {
super(props);
makeObservable(this);
}
@computed get options() { @computed get options() {
const context = { const context = {
entity: commandRegistry.activeEntity entity: commandRegistry.activeEntity

View File

@ -1,7 +1,7 @@
import "./confirm-dialog.scss"; import "./confirm-dialog.scss";
import React, { ReactNode } from "react"; import React, { ReactNode } from "react";
import { observable } from "mobx"; import { observable, makeObservable } from "mobx";
import { observer } from "mobx-react"; import { observer } from "mobx-react";
import { cssNames, noop, prevDefault } from "../../utils"; import { cssNames, noop, prevDefault } from "../../utils";
import { Button, ButtonProps } from "../button"; import { Button, ButtonProps } from "../button";
@ -32,6 +32,11 @@ export class ConfirmDialog extends React.Component<ConfirmDialogProps> {
@observable isSaving = false; @observable isSaving = false;
constructor(props: ConfirmDialogProps) {
super(props);
makeObservable(this);
}
static open(params: ConfirmDialogParams) { static open(params: ConfirmDialogParams) {
ConfirmDialog.isOpen = true; ConfirmDialog.isOpen = true;
ConfirmDialog.params = params; ConfirmDialog.params = params;

View File

@ -5,7 +5,7 @@ import path from "path";
import fs from "fs-extra"; import fs from "fs-extra";
import {Select, GroupSelectOption, SelectOption} from "../select"; import {Select, GroupSelectOption, SelectOption} from "../select";
import jsYaml from "js-yaml"; import jsYaml from "js-yaml";
import { observable } from "mobx"; import { observable, makeObservable } from "mobx";
import { observer } from "mobx-react"; import { observer } from "mobx-react";
import { cssNames } from "../../utils"; import { cssNames } from "../../utils";
import { createResourceStore } from "./create-resource.store"; import { createResourceStore } from "./create-resource.store";
@ -27,6 +27,11 @@ export class CreateResource extends React.Component<Props> {
@observable error = ""; @observable error = "";
@observable templates:GroupSelectOption<SelectOption>[] = []; @observable templates:GroupSelectOption<SelectOption>[] = [];
constructor(props: Props) {
super(props);
makeObservable(this);
}
componentDidMount() { componentDidMount() {
createResourceStore.getMergedTemplates().then(v => this.updateGroupSelectOptions(v)); createResourceStore.getMergedTemplates().then(v => this.updateGroupSelectOptions(v));
createResourceStore.watchUserTemplates(() => createResourceStore.getMergedTemplates().then(v => this.updateGroupSelectOptions(v))); createResourceStore.watchUserTemplates(() => createResourceStore.getMergedTemplates().then(v => this.updateGroupSelectOptions(v)));

View File

@ -7,7 +7,7 @@ import { dockStore, IDockTab } from "./dock.store";
import { Tab, TabProps } from "../tabs"; import { Tab, TabProps } from "../tabs";
import { Icon } from "../icon"; import { Icon } from "../icon";
import { Menu, MenuItem } from "../menu"; import { Menu, MenuItem } from "../menu";
import { observable } from "mobx"; import { observable, makeObservable } from "mobx";
export interface DockTabProps extends TabProps<IDockTab> { export interface DockTabProps extends TabProps<IDockTab> {
moreActions?: React.ReactNode; moreActions?: React.ReactNode;
@ -17,6 +17,11 @@ export interface DockTabProps extends TabProps<IDockTab> {
export class DockTab extends React.Component<DockTabProps> { export class DockTab extends React.Component<DockTabProps> {
@observable menuVisible = false; @observable menuVisible = false;
constructor(props: DockTabProps) {
super(props);
makeObservable(this);
}
get tabId() { get tabId() {
return this.props.value.id; return this.props.value.id;
} }

View File

@ -1,5 +1,5 @@
import MD5 from "crypto-js/md5"; import MD5 from "crypto-js/md5";
import { action, computed, IReactionOptions, observable, reaction } from "mobx"; import { action, computed, IReactionOptions, observable, reaction, makeObservable } from "mobx";
import { autobind, createStorage } from "../../utils"; import { autobind, createStorage } from "../../utils";
import throttle from "lodash/throttle"; import throttle from "lodash/throttle";
@ -81,6 +81,7 @@ export class DockStore implements DockStorageState {
} }
constructor() { constructor() {
makeObservable(this);
this.init(); this.init();
} }

View File

@ -1,7 +1,7 @@
import "./edit-resource.scss"; import "./edit-resource.scss";
import React from "react"; import React from "react";
import { action, computed, observable } from "mobx"; import { action, computed, observable, makeObservable } from "mobx";
import { observer } from "mobx-react"; import { observer } from "mobx-react";
import jsYaml from "js-yaml"; import jsYaml from "js-yaml";
import { IDockTab } from "./dock.store"; import { IDockTab } from "./dock.store";
@ -22,6 +22,11 @@ interface Props {
export class EditResource extends React.Component<Props> { export class EditResource extends React.Component<Props> {
@observable error = ""; @observable error = "";
constructor(props: Props) {
super(props);
makeObservable(this);
}
get tabId() { get tabId() {
return this.props.tab.id; return this.props.tab.id;
} }

Some files were not shown because too many files have changed in this diff Show More