mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Remove unnecessary code style changes
Signed-off-by: Janne Savolainen <janne.savolainen@live.fi>
This commit is contained in:
parent
dd11bcd67e
commit
5113729e87
@ -6,11 +6,7 @@
|
|||||||
import { anyObject } from "jest-mock-extended";
|
import { anyObject } from "jest-mock-extended";
|
||||||
import mockFs from "mock-fs";
|
import mockFs from "mock-fs";
|
||||||
import logger from "../../main/logger";
|
import logger from "../../main/logger";
|
||||||
import type {
|
import type { CatalogEntity, CatalogEntityData, CatalogEntityKindData } from "../catalog";
|
||||||
CatalogEntity,
|
|
||||||
CatalogEntityData,
|
|
||||||
CatalogEntityKindData,
|
|
||||||
} from "../catalog";
|
|
||||||
import { HotbarStore } from "../hotbar-store";
|
import { HotbarStore } from "../hotbar-store";
|
||||||
import { getDiForUnitTesting } from "../../main/getDiForUnitTesting";
|
import { getDiForUnitTesting } from "../../main/getDiForUnitTesting";
|
||||||
import hotbarStoreInjectable from "../hotbar-store.injectable";
|
import hotbarStoreInjectable from "../hotbar-store.injectable";
|
||||||
@ -72,9 +68,7 @@ jest.mock("../../main/catalog/catalog-entity-registry", () => ({
|
|||||||
},
|
},
|
||||||
}));
|
}));
|
||||||
|
|
||||||
function getMockCatalogEntity(
|
function getMockCatalogEntity(data: Partial<CatalogEntityData> & CatalogEntityKindData): CatalogEntity {
|
||||||
data: Partial<CatalogEntityData> & CatalogEntityKindData,
|
|
||||||
): CatalogEntity {
|
|
||||||
return {
|
return {
|
||||||
getName: jest.fn(() => data.metadata?.name),
|
getName: jest.fn(() => data.metadata?.name),
|
||||||
getId: jest.fn(() => data.metadata?.uid),
|
getId: jest.fn(() => data.metadata?.uid),
|
||||||
@ -233,16 +227,9 @@ describe("HotbarStore", () => {
|
|||||||
// aws -> catalog
|
// aws -> catalog
|
||||||
hotbarStore.restackItems(3, 0);
|
hotbarStore.restackItems(3, 0);
|
||||||
|
|
||||||
const items = hotbarStore
|
const items = hotbarStore.getActive().items.map(item => item?.entity.uid || null);
|
||||||
.getActive()
|
|
||||||
.items.map((item) => item?.entity.uid || null);
|
|
||||||
|
|
||||||
expect(items.slice(0, 4)).toEqual([
|
expect(items.slice(0, 4)).toEqual(["aws", "catalog-entity", "test", "minikube"]);
|
||||||
"aws",
|
|
||||||
"catalog-entity",
|
|
||||||
"test",
|
|
||||||
"minikube",
|
|
||||||
]);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it("moves items up", () => {
|
it("moves items up", () => {
|
||||||
@ -255,16 +242,9 @@ describe("HotbarStore", () => {
|
|||||||
// test -> aws
|
// test -> aws
|
||||||
hotbarStore.restackItems(1, 3);
|
hotbarStore.restackItems(1, 3);
|
||||||
|
|
||||||
const items = hotbarStore
|
const items = hotbarStore.getActive().items.map(item => item?.entity.uid || null);
|
||||||
.getActive()
|
|
||||||
.items.map((item) => item?.entity.uid || null);
|
|
||||||
|
|
||||||
expect(items.slice(0, 4)).toEqual([
|
expect(items.slice(0, 4)).toEqual(["catalog-entity", "minikube", "aws", "test"]);
|
||||||
"catalog-entity",
|
|
||||||
"minikube",
|
|
||||||
"aws",
|
|
||||||
"test",
|
|
||||||
]);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it("logs an error if cellIndex is out of bounds", () => {
|
it("logs an error if cellIndex is out of bounds", () => {
|
||||||
@ -279,22 +259,13 @@ describe("HotbarStore", () => {
|
|||||||
logger.error = mocked;
|
logger.error = mocked;
|
||||||
|
|
||||||
hotbarStore.addToHotbar(testCluster, -1);
|
hotbarStore.addToHotbar(testCluster, -1);
|
||||||
expect(mocked).toBeCalledWith(
|
expect(mocked).toBeCalledWith("[HOTBAR-STORE]: cannot pin entity to hotbar outside of index range", anyObject());
|
||||||
"[HOTBAR-STORE]: cannot pin entity to hotbar outside of index range",
|
|
||||||
anyObject(),
|
|
||||||
);
|
|
||||||
|
|
||||||
hotbarStore.addToHotbar(testCluster, 12);
|
hotbarStore.addToHotbar(testCluster, 12);
|
||||||
expect(mocked).toBeCalledWith(
|
expect(mocked).toBeCalledWith("[HOTBAR-STORE]: cannot pin entity to hotbar outside of index range", anyObject());
|
||||||
"[HOTBAR-STORE]: cannot pin entity to hotbar outside of index range",
|
|
||||||
anyObject(),
|
|
||||||
);
|
|
||||||
|
|
||||||
hotbarStore.addToHotbar(testCluster, 13);
|
hotbarStore.addToHotbar(testCluster, 13);
|
||||||
expect(mocked).toBeCalledWith(
|
expect(mocked).toBeCalledWith("[HOTBAR-STORE]: cannot pin entity to hotbar outside of index range", anyObject());
|
||||||
"[HOTBAR-STORE]: cannot pin entity to hotbar outside of index range",
|
|
||||||
anyObject(),
|
|
||||||
);
|
|
||||||
|
|
||||||
logger.error = error;
|
logger.error = error;
|
||||||
});
|
});
|
||||||
@ -302,23 +273,15 @@ describe("HotbarStore", () => {
|
|||||||
it("throws an error if getId is invalid or returns not a string", () => {
|
it("throws an error if getId is invalid or returns not a string", () => {
|
||||||
const hotbarStore = HotbarStore.getInstance();
|
const hotbarStore = HotbarStore.getInstance();
|
||||||
|
|
||||||
expect(() => hotbarStore.addToHotbar({} as any)).toThrowError(
|
expect(() => hotbarStore.addToHotbar({} as any)).toThrowError(TypeError);
|
||||||
TypeError,
|
expect(() => hotbarStore.addToHotbar({ getId: () => true } as any)).toThrowError(TypeError);
|
||||||
);
|
|
||||||
expect(() =>
|
|
||||||
hotbarStore.addToHotbar({ getId: () => true } as any),
|
|
||||||
).toThrowError(TypeError);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it("throws an error if getName is invalid or returns not a string", () => {
|
it("throws an error if getName is invalid or returns not a string", () => {
|
||||||
const hotbarStore = HotbarStore.getInstance();
|
const hotbarStore = HotbarStore.getInstance();
|
||||||
|
|
||||||
expect(() =>
|
expect(() => hotbarStore.addToHotbar({ getId: () => "" } as any)).toThrowError(TypeError);
|
||||||
hotbarStore.addToHotbar({ getId: () => "" } as any),
|
expect(() => hotbarStore.addToHotbar({ getId: () => "", getName: () => 4 } as any)).toThrowError(TypeError);
|
||||||
).toThrowError(TypeError);
|
|
||||||
expect(() =>
|
|
||||||
hotbarStore.addToHotbar({ getId: () => "", getName: () => 4 } as any),
|
|
||||||
).toThrowError(TypeError);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it("does nothing when item moved to same cell", () => {
|
it("does nothing when item moved to same cell", () => {
|
||||||
@ -443,9 +406,7 @@ describe("HotbarStore", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("allows to retrieve a hotbar", () => {
|
it("allows to retrieve a hotbar", () => {
|
||||||
const hotbar = HotbarStore.getInstance().getById(
|
const hotbar = HotbarStore.getInstance().getById("3caac17f-aec2-4723-9694-ad204465d935");
|
||||||
"3caac17f-aec2-4723-9694-ad204465d935",
|
|
||||||
);
|
|
||||||
|
|
||||||
expect(hotbar.id).toBe("3caac17f-aec2-4723-9694-ad204465d935");
|
expect(hotbar.id).toBe("3caac17f-aec2-4723-9694-ad204465d935");
|
||||||
});
|
});
|
||||||
|
|||||||
@ -48,12 +48,9 @@ export abstract class BaseStore<T> extends Singleton {
|
|||||||
*/
|
*/
|
||||||
load() {
|
load() {
|
||||||
if (!isTestEnv) {
|
if (!isTestEnv) {
|
||||||
logger.info(
|
logger.info(`[${kebabCase(this.displayName).toUpperCase()}]: LOADING from ${this.path} ...`);
|
||||||
`[${kebabCase(this.displayName).toUpperCase()}]: LOADING from ${
|
|
||||||
this.path
|
|
||||||
} ...`,
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const di = getLegacyGlobalDiForExtensionApi();
|
const di = getLegacyGlobalDiForExtensionApi();
|
||||||
|
|
||||||
const getConfigurationFileModel = di.inject(getConfigurationFileModelInjectable);
|
const getConfigurationFileModel = di.inject(getConfigurationFileModelInjectable);
|
||||||
@ -67,23 +64,14 @@ export abstract class BaseStore<T> extends Singleton {
|
|||||||
|
|
||||||
const res: any = this.fromStore(this.storeConfig.store);
|
const res: any = this.fromStore(this.storeConfig.store);
|
||||||
|
|
||||||
if (
|
if (res instanceof Promise || (typeof res === "object" && res && typeof res.then === "function")) {
|
||||||
res instanceof Promise ||
|
console.error(`${this.displayName} extends BaseStore<T>'s fromStore method returns a Promise or promise-like object. This is an error and must be fixed.`);
|
||||||
(typeof res === "object" && res && typeof res.then === "function")
|
|
||||||
) {
|
|
||||||
console.error(
|
|
||||||
`${this.displayName} extends BaseStore<T>'s fromStore method returns a Promise or promise-like object. This is an error and must be fixed.`,
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this.enableSync();
|
this.enableSync();
|
||||||
|
|
||||||
if (!isTestEnv) {
|
if (!isTestEnv) {
|
||||||
logger.info(
|
logger.info(`[${kebabCase(this.displayName).toUpperCase()}]: LOADED from ${this.path}`);
|
||||||
`[${kebabCase(this.displayName).toUpperCase()}]: LOADED from ${
|
|
||||||
this.path
|
|
||||||
}`,
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -124,27 +112,23 @@ export abstract class BaseStore<T> extends Singleton {
|
|||||||
this.syncDisposers.push(
|
this.syncDisposers.push(
|
||||||
reaction(
|
reaction(
|
||||||
() => toJS(this.toJSON()), // unwrap possible observables and react to everything
|
() => toJS(this.toJSON()), // unwrap possible observables and react to everything
|
||||||
(model) => this.onModelChange(model),
|
model => this.onModelChange(model),
|
||||||
this.params.syncOptions,
|
this.params.syncOptions,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
if (ipcMain) {
|
if (ipcMain) {
|
||||||
this.syncDisposers.push(
|
this.syncDisposers.push(ipcMainOn(this.syncMainChannel, (event, model: T) => {
|
||||||
ipcMainOn(this.syncMainChannel, (event, model: T) => {
|
logger.silly(`[STORE]: SYNC ${this.name} from renderer`, { model });
|
||||||
logger.silly(`[STORE]: SYNC ${this.name} from renderer`, { model });
|
this.onSync(model);
|
||||||
this.onSync(model);
|
}));
|
||||||
}),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ipcRenderer) {
|
if (ipcRenderer) {
|
||||||
this.syncDisposers.push(
|
this.syncDisposers.push(ipcRendererOn(this.syncRendererChannel, (event, model: T) => {
|
||||||
ipcRendererOn(this.syncRendererChannel, (event, model: T) => {
|
logger.silly(`[STORE]: SYNC ${this.name} from main`, { model });
|
||||||
logger.silly(`[STORE]: SYNC ${this.name} from main`, { model });
|
this.onSyncFromMain(model);
|
||||||
this.onSyncFromMain(model);
|
}));
|
||||||
}),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -160,7 +144,7 @@ export abstract class BaseStore<T> extends Singleton {
|
|||||||
}
|
}
|
||||||
|
|
||||||
disableSync() {
|
disableSync() {
|
||||||
this.syncDisposers.forEach((dispose) => dispose());
|
this.syncDisposers.forEach(dispose => dispose());
|
||||||
this.syncDisposers.length = 0;
|
this.syncDisposers.length = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -16,4 +16,7 @@ export const asLegacyGlobalObjectForExtensionApiWithModifications = <
|
|||||||
injectable: Injectable<InjectableInstance, InjectionTokenInstance, void>,
|
injectable: Injectable<InjectableInstance, InjectionTokenInstance, void>,
|
||||||
modificationObject: ModificationObject,
|
modificationObject: ModificationObject,
|
||||||
) =>
|
) =>
|
||||||
Object.assign(asLegacyGlobalForExtensionApi(injectable), modificationObject);
|
Object.assign(
|
||||||
|
asLegacyGlobalForExtensionApi(injectable),
|
||||||
|
modificationObject,
|
||||||
|
);
|
||||||
|
|||||||
@ -7,8 +7,7 @@ import { ExtensionLoader } from "./extension-loader";
|
|||||||
import updateExtensionsStateInjectable from "./update-extensions-state/update-extensions-state.injectable";
|
import updateExtensionsStateInjectable from "./update-extensions-state/update-extensions-state.injectable";
|
||||||
import createExtensionInstanceInjectable from "./create-extension-instance/create-extension-instance.injectable";
|
import createExtensionInstanceInjectable from "./create-extension-instance/create-extension-instance.injectable";
|
||||||
import { extensionRegistratorInjectionToken } from "./extension-registrator-injection-token";
|
import { extensionRegistratorInjectionToken } from "./extension-registrator-injection-token";
|
||||||
import extensionInstallationCounterInjectable
|
import extensionInstallationCounterInjectable from "./extension-installation-counter.injectable";
|
||||||
from "./extension-installation-counter.injectable";
|
|
||||||
|
|
||||||
const extensionLoaderInjectable = getInjectable({
|
const extensionLoaderInjectable = getInjectable({
|
||||||
id: "extension-loader",
|
id: "extension-loader",
|
||||||
|
|||||||
@ -13,16 +13,11 @@ import { ExtensionsStore } from "../../../extensions/extensions-store/extensions
|
|||||||
import type { LensProtocolRouterMain } from "../lens-protocol-router-main/lens-protocol-router-main";
|
import type { LensProtocolRouterMain } from "../lens-protocol-router-main/lens-protocol-router-main";
|
||||||
import mockFs from "mock-fs";
|
import mockFs from "mock-fs";
|
||||||
import { getDiForUnitTesting } from "../../getDiForUnitTesting";
|
import { getDiForUnitTesting } from "../../getDiForUnitTesting";
|
||||||
import extensionLoaderInjectable
|
import extensionLoaderInjectable from "../../../extensions/extension-loader/extension-loader.injectable";
|
||||||
from "../../../extensions/extension-loader/extension-loader.injectable";
|
import lensProtocolRouterMainInjectable from "../lens-protocol-router-main/lens-protocol-router-main.injectable";
|
||||||
import lensProtocolRouterMainInjectable
|
import extensionsStoreInjectable from "../../../extensions/extensions-store/extensions-store.injectable";
|
||||||
from "../lens-protocol-router-main/lens-protocol-router-main.injectable";
|
import getConfigurationFileModelInjectable from "../../../common/get-configuration-file-model/get-configuration-file-model.injectable";
|
||||||
import extensionsStoreInjectable
|
import appVersionInjectable from "../../../common/get-configuration-file-model/app-version/app-version.injectable";
|
||||||
from "../../../extensions/extensions-store/extensions-store.injectable";
|
|
||||||
import getConfigurationFileModelInjectable
|
|
||||||
from "../../../common/get-configuration-file-model/get-configuration-file-model.injectable";
|
|
||||||
import appVersionInjectable
|
|
||||||
from "../../../common/get-configuration-file-model/app-version/app-version.injectable";
|
|
||||||
|
|
||||||
jest.mock("../../../common/ipc");
|
jest.mock("../../../common/ipc");
|
||||||
|
|
||||||
|
|||||||
@ -8,8 +8,7 @@ import fse from "fs-extra";
|
|||||||
import type { ClusterModel } from "../../common/cluster-types";
|
import type { ClusterModel } from "../../common/cluster-types";
|
||||||
import type { MigrationDeclaration } from "../helpers";
|
import type { MigrationDeclaration } from "../helpers";
|
||||||
import { getLegacyGlobalDiForExtensionApi } from "../../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api";
|
import { getLegacyGlobalDiForExtensionApi } from "../../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api";
|
||||||
import directoryForUserDataInjectable
|
import directoryForUserDataInjectable from "../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable";
|
||||||
from "../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable";
|
|
||||||
|
|
||||||
interface Pre500WorkspaceStoreModel {
|
interface Pre500WorkspaceStoreModel {
|
||||||
workspaces: {
|
workspaces: {
|
||||||
|
|||||||
@ -13,7 +13,6 @@ import { observer } from "mobx-react";
|
|||||||
import path from "path";
|
import path from "path";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import * as uuid from "uuid";
|
import * as uuid from "uuid";
|
||||||
|
|
||||||
import { appEventBus } from "../../../common/app-event-bus/event-bus";
|
import { appEventBus } from "../../../common/app-event-bus/event-bus";
|
||||||
import { loadConfigFromString, splitConfig } from "../../../common/kube-helpers";
|
import { loadConfigFromString, splitConfig } from "../../../common/kube-helpers";
|
||||||
import { docsUrl } from "../../../common/vars";
|
import { docsUrl } from "../../../common/vars";
|
||||||
@ -24,9 +23,7 @@ import { SettingLayout } from "../layout/setting-layout";
|
|||||||
import { MonacoEditor } from "../monaco-editor";
|
import { MonacoEditor } from "../monaco-editor";
|
||||||
import { withInjectables } from "@ogre-tools/injectable-react";
|
import { withInjectables } from "@ogre-tools/injectable-react";
|
||||||
import getCustomKubeConfigDirectoryInjectable from "../../../common/app-paths/get-custom-kube-config-directory/get-custom-kube-config-directory.injectable";
|
import getCustomKubeConfigDirectoryInjectable from "../../../common/app-paths/get-custom-kube-config-directory/get-custom-kube-config-directory.injectable";
|
||||||
import navigateToCatalogInjectable, {
|
import navigateToCatalogInjectable, { NavigateToCatalog } from "../../../common/front-end-routing/routes/catalog/navigate-to-catalog.injectable";
|
||||||
NavigateToCatalog,
|
|
||||||
} from "../../../common/front-end-routing/routes/catalog/navigate-to-catalog.injectable";
|
|
||||||
|
|
||||||
interface Option {
|
interface Option {
|
||||||
config: KubeConfig;
|
config: KubeConfig;
|
||||||
|
|||||||
@ -15,19 +15,15 @@ import type { CatalogEntityStore } from "./catalog-entity-store/catalog-entity.s
|
|||||||
import { getDiForUnitTesting } from "../../getDiForUnitTesting";
|
import { getDiForUnitTesting } from "../../getDiForUnitTesting";
|
||||||
import type { DiContainer } from "@ogre-tools/injectable";
|
import type { DiContainer } from "@ogre-tools/injectable";
|
||||||
import catalogEntityStoreInjectable from "./catalog-entity-store/catalog-entity-store.injectable";
|
import catalogEntityStoreInjectable from "./catalog-entity-store/catalog-entity-store.injectable";
|
||||||
import catalogEntityRegistryInjectable
|
import catalogEntityRegistryInjectable from "../../api/catalog-entity-registry/catalog-entity-registry.injectable";
|
||||||
from "../../api/catalog-entity-registry/catalog-entity-registry.injectable";
|
|
||||||
import type { DiRender } from "../test-utils/renderFor";
|
import type { DiRender } from "../test-utils/renderFor";
|
||||||
import { renderFor } from "../test-utils/renderFor";
|
import { renderFor } from "../test-utils/renderFor";
|
||||||
import { ThemeStore } from "../../theme.store";
|
import { ThemeStore } from "../../theme.store";
|
||||||
import { UserStore } from "../../../common/user-store";
|
import { UserStore } from "../../../common/user-store";
|
||||||
import mockFs from "mock-fs";
|
import mockFs from "mock-fs";
|
||||||
import directoryForUserDataInjectable
|
import directoryForUserDataInjectable from "../../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable";
|
||||||
from "../../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable";
|
import getConfigurationFileModelInjectable from "../../../common/get-configuration-file-model/get-configuration-file-model.injectable";
|
||||||
import getConfigurationFileModelInjectable
|
import appVersionInjectable from "../../../common/get-configuration-file-model/app-version/app-version.injectable";
|
||||||
from "../../../common/get-configuration-file-model/get-configuration-file-model.injectable";
|
|
||||||
import appVersionInjectable
|
|
||||||
from "../../../common/get-configuration-file-model/app-version/app-version.injectable";
|
|
||||||
import type { AppEvent } from "../../../common/app-event-bus/event-bus";
|
import type { AppEvent } from "../../../common/app-event-bus/event-bus";
|
||||||
import appEventBusInjectable from "../../../common/app-event-bus/app-event-bus.injectable";
|
import appEventBusInjectable from "../../../common/app-event-bus/app-event-bus.injectable";
|
||||||
|
|
||||||
|
|||||||
@ -8,16 +8,7 @@ import styles from "./catalog.module.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 {
|
import { action, computed, IComputedValue, makeObservable, observable, reaction, runInAction, when } from "mobx";
|
||||||
action,
|
|
||||||
computed,
|
|
||||||
IComputedValue,
|
|
||||||
makeObservable,
|
|
||||||
observable,
|
|
||||||
reaction,
|
|
||||||
runInAction,
|
|
||||||
when,
|
|
||||||
} from "mobx";
|
|
||||||
import type { CatalogEntityStore } from "./catalog-entity-store/catalog-entity.store";
|
import type { CatalogEntityStore } from "./catalog-entity-store/catalog-entity.store";
|
||||||
import { navigate } from "../../navigation";
|
import { navigate } from "../../navigation";
|
||||||
import { MenuItem, MenuActions } from "../menu";
|
import { MenuItem, MenuActions } from "../menu";
|
||||||
@ -43,9 +34,7 @@ import getCategoryColumnsInjectable from "./get-category-columns.injectable";
|
|||||||
import type { RegisteredCustomCategoryViewDecl } from "./custom-views.injectable";
|
import type { RegisteredCustomCategoryViewDecl } from "./custom-views.injectable";
|
||||||
import customCategoryViewsInjectable from "./custom-views.injectable";
|
import customCategoryViewsInjectable from "./custom-views.injectable";
|
||||||
import type { CustomCategoryViewComponents } from "./custom-views";
|
import type { CustomCategoryViewComponents } from "./custom-views";
|
||||||
import navigateToCatalogInjectable, {
|
import navigateToCatalogInjectable, { NavigateToCatalog } from "../../../common/front-end-routing/routes/catalog/navigate-to-catalog.injectable";
|
||||||
NavigateToCatalog,
|
|
||||||
} from "../../../common/front-end-routing/routes/catalog/navigate-to-catalog.injectable";
|
|
||||||
import catalogRouteParametersInjectable from "./catalog-route-parameters.injectable";
|
import catalogRouteParametersInjectable from "./catalog-route-parameters.injectable";
|
||||||
import { browseCatalogTab } from "./catalog-browse-tab";
|
import { browseCatalogTab } from "./catalog-browse-tab";
|
||||||
import type { AppEvent } from "../../../common/app-event-bus/event-bus";
|
import type { AppEvent } from "../../../common/app-event-bus/event-bus";
|
||||||
|
|||||||
@ -56,11 +56,7 @@ class NonInjectedEntitySettings extends React.Component<Dependencies> {
|
|||||||
get menuItems() {
|
get menuItems() {
|
||||||
if (!this.entity) return [];
|
if (!this.entity) return [];
|
||||||
|
|
||||||
return EntitySettingRegistry.getInstance().getItemsForKind(
|
return EntitySettingRegistry.getInstance().getItemsForKind(this.entity.kind, this.entity.apiVersion, this.entity.metadata.source);
|
||||||
this.entity.kind,
|
|
||||||
this.entity.apiVersion,
|
|
||||||
this.entity.metadata.source,
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
get activeSetting() {
|
get activeSetting() {
|
||||||
@ -74,9 +70,7 @@ class NonInjectedEntitySettings extends React.Component<Dependencies> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
renderNavigation() {
|
renderNavigation() {
|
||||||
const groups = Object.entries(
|
const groups = Object.entries(groupBy(this.menuItems, (item) => item.group || "Extensions"));
|
||||||
groupBy(this.menuItems, (item) => item.group || "Extensions"),
|
|
||||||
);
|
|
||||||
|
|
||||||
groups.sort((a, b) => {
|
groups.sort((a, b) => {
|
||||||
if (a[0] === "Settings") return -1;
|
if (a[0] === "Settings") return -1;
|
||||||
@ -90,26 +84,21 @@ class NonInjectedEntitySettings extends React.Component<Dependencies> {
|
|||||||
<div className="flex items-center pb-8">
|
<div className="flex items-center pb-8">
|
||||||
<Avatar
|
<Avatar
|
||||||
title={this.entity.getName()}
|
title={this.entity.getName()}
|
||||||
colorHash={`${this.entity.getName()}-${
|
colorHash={`${this.entity.getName()}-${this.entity.metadata.source}`}
|
||||||
this.entity.metadata.source
|
|
||||||
}`}
|
|
||||||
src={this.entity.spec.icon?.src}
|
src={this.entity.spec.icon?.src}
|
||||||
className={styles.settingsAvatar}
|
className={styles.settingsAvatar}
|
||||||
size={40}
|
size={40}
|
||||||
/>
|
/>
|
||||||
<div className={styles.entityName}>{this.entity.getName()}</div>
|
<div className={styles.entityName}>
|
||||||
|
{this.entity.getName()}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<Tabs
|
<Tabs className="flex column" scrollable={false} onChange={this.onTabChange} value={this.activeTab}>
|
||||||
className="flex column"
|
{ groups.map((group, groupIndex) => (
|
||||||
scrollable={false}
|
|
||||||
onChange={this.onTabChange}
|
|
||||||
value={this.activeTab}
|
|
||||||
>
|
|
||||||
{groups.map((group, groupIndex) => (
|
|
||||||
<React.Fragment key={`group-${groupIndex}`}>
|
<React.Fragment key={`group-${groupIndex}`}>
|
||||||
<hr />
|
<hr/>
|
||||||
<div className="header">{group[0]}</div>
|
<div className="header">{group[0]}</div>
|
||||||
{group[1].map((setting, index) => (
|
{ group[1].map((setting, index) => (
|
||||||
<Tab
|
<Tab
|
||||||
key={index}
|
key={index}
|
||||||
value={setting.id}
|
value={setting.id}
|
||||||
@ -134,20 +123,20 @@ class NonInjectedEntitySettings extends React.Component<Dependencies> {
|
|||||||
const { activeSetting } = this;
|
const { activeSetting } = this;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<SettingLayout navigation={this.renderNavigation()} contentGaps={false}>
|
<SettingLayout
|
||||||
{activeSetting && (
|
navigation={this.renderNavigation()}
|
||||||
<section>
|
contentGaps={false}
|
||||||
<h2 data-testid={`${activeSetting.id}-header`}>
|
>
|
||||||
{activeSetting.title}
|
{
|
||||||
</h2>
|
activeSetting && (
|
||||||
<section>
|
<section>
|
||||||
<activeSetting.components.View
|
<h2 data-testid={`${activeSetting.id}-header`}>{activeSetting.title}</h2>
|
||||||
entity={this.entity}
|
<section>
|
||||||
key={activeSetting.title}
|
<activeSetting.components.View entity={this.entity} key={activeSetting.title} />
|
||||||
/>
|
</section>
|
||||||
</section>
|
</section>
|
||||||
</section>
|
)
|
||||||
)}
|
}
|
||||||
</SettingLayout>
|
</SettingLayout>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -14,7 +14,6 @@ import { PortForwardDetails } from "./port-forward-details";
|
|||||||
import { withInjectables } from "@ogre-tools/injectable-react";
|
import { withInjectables } from "@ogre-tools/injectable-react";
|
||||||
import portForwardStoreInjectable from "../../port-forward/port-forward-store/port-forward-store.injectable";
|
import portForwardStoreInjectable from "../../port-forward/port-forward-store/port-forward-store.injectable";
|
||||||
import { SiblingsInTabLayout } from "../layout/siblings-in-tab-layout";
|
import { SiblingsInTabLayout } from "../layout/siblings-in-tab-layout";
|
||||||
|
|
||||||
import { computed, IComputedValue, makeObservable } from "mobx";
|
import { computed, IComputedValue, makeObservable } from "mobx";
|
||||||
import portForwardsRouteParametersInjectable from "./port-forwards-route-parameters.injectable";
|
import portForwardsRouteParametersInjectable from "./port-forwards-route-parameters.injectable";
|
||||||
import navigateToPortForwardsInjectable, { NavigateToPortForwards } from "../../../common/front-end-routing/routes/cluster/network/port-forwards/navigate-to-port-forwards.injectable";
|
import navigateToPortForwardsInjectable, { NavigateToPortForwards } from "../../../common/front-end-routing/routes/cluster/network/port-forwards/navigate-to-port-forwards.injectable";
|
||||||
|
|||||||
@ -18,8 +18,7 @@ import { IComputedValue, reaction } from "mobx";
|
|||||||
import currentRouteComponentInjectable from "../../routes/current-route-component.injectable";
|
import currentRouteComponentInjectable from "../../routes/current-route-component.injectable";
|
||||||
import { setEntityOnRouteMatch } from "../../api/helpers/general-active-sync";
|
import { setEntityOnRouteMatch } from "../../api/helpers/general-active-sync";
|
||||||
import { navigation } from "../../navigation";
|
import { navigation } from "../../navigation";
|
||||||
import welcomeRouteInjectable
|
import welcomeRouteInjectable from "../../../common/front-end-routing/routes/welcome/welcome-route.injectable";
|
||||||
from "../../../common/front-end-routing/routes/welcome/welcome-route.injectable";
|
|
||||||
import { buildURL } from "../../../common/utils/buildUrl";
|
import { buildURL } from "../../../common/utils/buildUrl";
|
||||||
|
|
||||||
interface Dependencies {
|
interface Dependencies {
|
||||||
|
|||||||
@ -14,9 +14,7 @@ import { ClusterStore } from "../../../common/cluster-store/cluster-store";
|
|||||||
import { catalogEntityRegistry } from "../../api/catalog-entity-registry";
|
import { catalogEntityRegistry } from "../../api/catalog-entity-registry";
|
||||||
import { requestClusterActivation } from "../../ipc";
|
import { requestClusterActivation } from "../../ipc";
|
||||||
import { withInjectables } from "@ogre-tools/injectable-react";
|
import { withInjectables } from "@ogre-tools/injectable-react";
|
||||||
import navigateToCatalogInjectable, {
|
import navigateToCatalogInjectable, { NavigateToCatalog } from "../../../common/front-end-routing/routes/catalog/navigate-to-catalog.injectable";
|
||||||
NavigateToCatalog,
|
|
||||||
} from "../../../common/front-end-routing/routes/catalog/navigate-to-catalog.injectable";
|
|
||||||
import clusterViewRouteParametersInjectable from "./cluster-view-route-parameters.injectable";
|
import clusterViewRouteParametersInjectable from "./cluster-view-route-parameters.injectable";
|
||||||
|
|
||||||
interface Dependencies {
|
interface Dependencies {
|
||||||
|
|||||||
@ -6,11 +6,7 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import { observer } from "mobx-react";
|
import { observer } from "mobx-react";
|
||||||
import { Select } from "../select";
|
import { Select } from "../select";
|
||||||
|
import hotbarStoreInjectable, { HotbarStore } from "../../../common/hotbar-store.injectable";
|
||||||
import hotbarStoreInjectable, {
|
|
||||||
HotbarStore,
|
|
||||||
} from "../../../common/hotbar-store.injectable";
|
|
||||||
|
|
||||||
import type { CommandOverlay } from "../command-palette";
|
import type { CommandOverlay } from "../command-palette";
|
||||||
import { HotbarAddCommand } from "./hotbar-add-command";
|
import { HotbarAddCommand } from "./hotbar-add-command";
|
||||||
import { HotbarRemoveCommand } from "./hotbar-remove-command";
|
import { HotbarRemoveCommand } from "./hotbar-remove-command";
|
||||||
|
|||||||
@ -24,13 +24,9 @@ import clusterFrameContextInjectable from "../../cluster-frame-context/cluster-f
|
|||||||
import kubeWatchApiInjectable from "../../kube-watch-api/kube-watch-api.injectable";
|
import kubeWatchApiInjectable from "../../kube-watch-api/kube-watch-api.injectable";
|
||||||
import type { KubeWatchSubscribeStoreOptions } from "../../kube-watch-api/kube-watch-api";
|
import type { KubeWatchSubscribeStoreOptions } from "../../kube-watch-api/kube-watch-api";
|
||||||
|
|
||||||
type ItemListLayoutPropsWithoutGetItems<K extends KubeObject> = Omit<
|
type ItemListLayoutPropsWithoutGetItems<K extends KubeObject> = Omit<ItemListLayoutProps<K>, "getItems">;
|
||||||
ItemListLayoutProps<K>,
|
|
||||||
"getItems"
|
|
||||||
>;
|
|
||||||
|
|
||||||
export interface KubeObjectListLayoutProps<K extends KubeObject>
|
export interface KubeObjectListLayoutProps<K extends KubeObject> extends ItemListLayoutPropsWithoutGetItems<K> {
|
||||||
extends ItemListLayoutPropsWithoutGetItems<K> {
|
|
||||||
items?: K[];
|
items?: K[];
|
||||||
getItems?: () => K[];
|
getItems?: () => K[];
|
||||||
store: KubeObjectStore<K>;
|
store: KubeObjectStore<K>;
|
||||||
@ -45,10 +41,7 @@ const defaultProps: Partial<KubeObjectListLayoutProps<KubeObject>> = {
|
|||||||
|
|
||||||
interface Dependencies {
|
interface Dependencies {
|
||||||
clusterFrameContext: ClusterFrameContext;
|
clusterFrameContext: ClusterFrameContext;
|
||||||
subscribeToStores: (
|
subscribeToStores: (stores: KubeObjectStore<KubeObject>[], options: KubeWatchSubscribeStoreOptions) => Disposer;
|
||||||
stores: KubeObjectStore<KubeObject>[],
|
|
||||||
options: KubeWatchSubscribeStoreOptions
|
|
||||||
) => Disposer;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@observer
|
@observer
|
||||||
@ -70,12 +63,10 @@ class NonInjectedKubeObjectListLayout<K extends KubeObject> extends React.Compon
|
|||||||
const { store, dependentStores = [], subscribeStores } = this.props;
|
const { store, dependentStores = [], subscribeStores } = this.props;
|
||||||
const stores = Array.from(new Set([store, ...dependentStores]));
|
const stores = Array.from(new Set([store, ...dependentStores]));
|
||||||
const reactions: Disposer[] = [
|
const reactions: Disposer[] = [
|
||||||
reaction(
|
reaction(() => this.props.clusterFrameContext.contextNamespaces.slice(), () => {
|
||||||
() => this.props.clusterFrameContext.contextNamespaces.slice(),
|
// clear load errors
|
||||||
() => {
|
this.loadErrors.length = 0;
|
||||||
// clear load errors
|
}),
|
||||||
this.loadErrors.length = 0;
|
|
||||||
}),
|
|
||||||
];
|
];
|
||||||
|
|
||||||
if (subscribeStores) {
|
if (subscribeStores) {
|
||||||
@ -111,10 +102,8 @@ class NonInjectedKubeObjectListLayout<K extends KubeObject> extends React.Compon
|
|||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const { className, customizeHeader, store, items, ...layoutProps } =
|
const { className, customizeHeader, store, items, ...layoutProps } = this.props;
|
||||||
this.props;
|
const placeholderString = ResourceNames[ResourceKindMap[store.api.kind]] || store.api.kind;
|
||||||
const placeholderString =
|
|
||||||
ResourceNames[ResourceKindMap[store.api.kind]] || store.api.kind;
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ItemListLayout
|
<ItemListLayout
|
||||||
@ -152,10 +141,7 @@ class NonInjectedKubeObjectListLayout<K extends KubeObject> extends React.Compon
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const InjectedKubeObjectListLayout = withInjectables<
|
const InjectedKubeObjectListLayout = withInjectables<Dependencies, KubeObjectListLayoutProps<KubeObject>>(NonInjectedKubeObjectListLayout, {
|
||||||
Dependencies,
|
|
||||||
KubeObjectListLayoutProps<KubeObject>
|
|
||||||
>(NonInjectedKubeObjectListLayout, {
|
|
||||||
getProps: (di, props) => ({
|
getProps: (di, props) => ({
|
||||||
clusterFrameContext: di.inject(clusterFrameContextInjectable),
|
clusterFrameContext: di.inject(clusterFrameContextInjectable),
|
||||||
subscribeToStores: di.inject(kubeWatchApiInjectable).subscribeStores,
|
subscribeToStores: di.inject(kubeWatchApiInjectable).subscribeStores,
|
||||||
|
|||||||
@ -11,15 +11,12 @@ import { getDiForUnitTesting } from "../../getDiForUnitTesting";
|
|||||||
import type { DiContainer } from "@ogre-tools/injectable";
|
import type { DiContainer } from "@ogre-tools/injectable";
|
||||||
import { DiRender, renderFor } from "../test-utils/renderFor";
|
import { DiRender, renderFor } from "../test-utils/renderFor";
|
||||||
import mockFs from "mock-fs";
|
import mockFs from "mock-fs";
|
||||||
import directoryForUserDataInjectable
|
import directoryForUserDataInjectable from "../../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable";
|
||||||
from "../../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable";
|
|
||||||
import rendererExtensionsInjectable from "../../../extensions/renderer-extensions.injectable";
|
import rendererExtensionsInjectable from "../../../extensions/renderer-extensions.injectable";
|
||||||
import { computed } from "mobx";
|
import { computed } from "mobx";
|
||||||
import type { LensRendererExtension } from "../../../extensions/lens-renderer-extension";
|
import type { LensRendererExtension } from "../../../extensions/lens-renderer-extension";
|
||||||
import getConfigurationFileModelInjectable
|
import getConfigurationFileModelInjectable from "../../../common/get-configuration-file-model/get-configuration-file-model.injectable";
|
||||||
from "../../../common/get-configuration-file-model/get-configuration-file-model.injectable";
|
import appVersionInjectable from "../../../common/get-configuration-file-model/app-version/app-version.injectable";
|
||||||
import appVersionInjectable
|
|
||||||
from "../../../common/get-configuration-file-model/app-version/app-version.injectable";
|
|
||||||
|
|
||||||
jest.mock("electron", () => ({
|
jest.mock("electron", () => ({
|
||||||
ipcRenderer: {
|
ipcRenderer: {
|
||||||
|
|||||||
@ -30,9 +30,7 @@ export interface SelectOption<T = any> {
|
|||||||
label?: React.ReactNode;
|
label?: React.ReactNode;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface SelectProps<T = any>
|
export interface SelectProps<T = any> extends ReactSelectProps<T, boolean>, CreatableProps<T, boolean> {
|
||||||
extends ReactSelectProps<T, boolean>,
|
|
||||||
CreatableProps<T, boolean> {
|
|
||||||
id: string;
|
id: string;
|
||||||
value?: T;
|
value?: T;
|
||||||
themeName?: "dark" | "light" | "outlined" | "lens";
|
themeName?: "dark" | "light" | "outlined" | "lens";
|
||||||
|
|||||||
@ -25,6 +25,7 @@ import { StorageClassDetails } from "../components/+storage-classes";
|
|||||||
import { PersistentVolumeClaimDetails } from "../components/+storage-volume-claims";
|
import { PersistentVolumeClaimDetails } from "../components/+storage-volume-claims";
|
||||||
import { PersistentVolumeDetails } from "../components/+storage-volumes";
|
import { PersistentVolumeDetails } from "../components/+storage-volumes";
|
||||||
import { ClusterRoleDetails } from "../components/+user-management/+cluster-roles";
|
import { ClusterRoleDetails } from "../components/+user-management/+cluster-roles";
|
||||||
|
import { ClusterRoleBindingDetails } from "../components/+user-management/+cluster-role-bindings";
|
||||||
import { RoleDetails } from "../components/+user-management/+roles";
|
import { RoleDetails } from "../components/+user-management/+roles";
|
||||||
import { RoleBindingDetails } from "../components/+user-management/+role-bindings";
|
import { RoleBindingDetails } from "../components/+user-management/+role-bindings";
|
||||||
import { ServiceAccountsDetails } from "../components/+user-management/+service-accounts";
|
import { ServiceAccountsDetails } from "../components/+user-management/+service-accounts";
|
||||||
@ -36,7 +37,6 @@ import { PodDetails } from "../components/+workloads-pods";
|
|||||||
import { ReplicaSetDetails } from "../components/+workloads-replicasets";
|
import { ReplicaSetDetails } from "../components/+workloads-replicasets";
|
||||||
import { StatefulSetDetails } from "../components/+workloads-statefulsets";
|
import { StatefulSetDetails } from "../components/+workloads-statefulsets";
|
||||||
import type { KubeObjectDetailsProps } from "../components/kube-object-details";
|
import type { KubeObjectDetailsProps } from "../components/kube-object-details";
|
||||||
import { ClusterRoleBindingDetails } from "../components/+user-management/+cluster-role-bindings";
|
|
||||||
|
|
||||||
export function initKubeObjectDetailRegistry() {
|
export function initKubeObjectDetailRegistry() {
|
||||||
KubeObjectDetailRegistry.getInstance()
|
KubeObjectDetailRegistry.getInstance()
|
||||||
|
|||||||
@ -7,8 +7,8 @@ import { getDiForUnitTesting as getMainDi } from "../main/getDiForUnitTesting";
|
|||||||
import { overrideIpcBridge } from "./override-ipc-bridge";
|
import { overrideIpcBridge } from "./override-ipc-bridge";
|
||||||
|
|
||||||
export const getDisForUnitTesting = ({ doGeneralOverrides } = { doGeneralOverrides: false }) => {
|
export const getDisForUnitTesting = ({ doGeneralOverrides } = { doGeneralOverrides: false }) => {
|
||||||
const mainDi = getMainDi({ doGeneralOverrides });
|
|
||||||
const rendererDi = getRendererDi({ doGeneralOverrides });
|
const rendererDi = getRendererDi({ doGeneralOverrides });
|
||||||
|
const mainDi = getMainDi({ doGeneralOverrides });
|
||||||
|
|
||||||
overrideIpcBridge({ rendererDi, mainDi });
|
overrideIpcBridge({ rendererDi, mainDi });
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user