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

change BaseRegistry to only have one type parameter

Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
Sebastian Malton 2020-11-20 13:20:47 -05:00
parent 8c73861962
commit fbb895c816
8 changed files with 28 additions and 44 deletions

View File

@ -1,5 +1,7 @@
// Common utils (main OR renderer)
export const noop: any = () => { /* */ };
export * from "./app-version";
export * from "./autobind";
export * from "./base64";

View File

@ -2,19 +2,18 @@
import { action, observable } from "mobx";
import { LensExtension } from "../lens-extension";
export class BaseRegistry<T = object, I extends T = T> {
export class BaseRegistry<T> {
private items = observable<T>([], { deep: false });
getItems(): I[] {
return this.items.toJS() as I[];
getItems(): T[] {
return this.items.toJS();
}
add(items: T | T[], ext?: LensExtension): () => void; // allow method overloading with required "ext"
add(items: T[], ext?: LensExtension): () => void; // allow method overloading with required "ext"
@action
add(items: T | T[]) {
const normalizedItems = (Array.isArray(items) ? items : [items]);
this.items.push(...normalizedItems);
return () => this.remove(...normalizedItems);
add(items: T[]) {
this.items.push(...items);
return () => this.remove(...items);
}
@action

View File

@ -14,15 +14,10 @@ export interface KubeObjectDetailRegistration {
export class KubeObjectDetailRegistry extends BaseRegistry<KubeObjectDetailRegistration> {
getItemsForKind(kind: string, apiVersion: string) {
const items = this.getItems().filter((item) => {
return item.kind === kind && item.apiVersions.includes(apiVersion);
}).map((item) => {
if (item.priority === null) {
item.priority = 50;
}
return item;
});
return items.sort((a, b) => b.priority - a.priority);
return this.getItems()
.filter(item => item.kind === kind && item.apiVersions.includes(apiVersion))
.map(item => (item.priority ??= 50, item))
.sort((a, b) => b.priority - a.priority);
}
}

View File

@ -13,9 +13,8 @@ export interface KubeObjectMenuRegistration {
export class KubeObjectMenuRegistry extends BaseRegistry<KubeObjectMenuRegistration> {
getItemsForKind(kind: string, apiVersion: string) {
return this.getItems().filter((item) => {
return item.kind === kind && item.apiVersions.includes(apiVersion);
});
return this.getItems()
.filter(item => item.kind === kind && item.apiVersions.includes(apiVersion));
}
}

View File

@ -9,9 +9,8 @@ export interface KubeObjectStatusRegistration {
export class KubeObjectStatusRegistry extends BaseRegistry<KubeObjectStatusRegistration> {
getItemsForKind(kind: string, apiVersion: string) {
return this.getItems().filter((item) => {
return item.kind === kind && item.apiVersions.includes(apiVersion);
});
return this.getItems()
.filter(item => item.kind === kind && item.apiVersions.includes(apiVersion));
}
}

View File

@ -30,28 +30,16 @@ export interface PageMenuComponents {
export class GlobalPageMenuRegistry extends BaseRegistry<PageMenuRegistration> {
@action
add(items: PageMenuRegistration[], ext: LensExtension) {
const normalizedItems = items.map(menuItem => {
menuItem.target = {
extensionId: ext.name,
...(menuItem.target || {}),
};
return menuItem;
});
return super.add(normalizedItems);
const norm = items.map(item => ((item.target ??= {}).extensionId = ext.name, item));
return super.add(norm);
}
}
export class ClusterPageMenuRegistry extends BaseRegistry<ClusterPageMenuRegistration> {
@action
add(items: PageMenuRegistration[], ext: LensExtension) {
const normalizedItems = items.map(menuItem => {
menuItem.target = {
extensionId: ext.name,
...(menuItem.target || {}),
};
return menuItem;
});
return super.add(normalizedItems);
const norm = items.map(item => ((item.target ??= {}).extensionId = ext.name, item));
return super.add(norm);
}
getRootItems() {

View File

@ -7,6 +7,7 @@ import { compile } from "path-to-regexp";
import { BaseRegistry } from "./base-registry";
import { LensExtension } from "../lens-extension";
import logger from "../../main/logger";
import { noop } from "../../common/utils";
export interface PageRegistration {
/**
@ -59,24 +60,26 @@ export function getExtensionPageUrl<P extends object>({ extensionId, pageId = ""
return extPageRoutePath;
}
export class PageRegistry extends BaseRegistry<PageRegistration, RegisteredPage> {
export class PageRegistry extends BaseRegistry<RegisteredPage> {
@action
add(items: PageRegistration[], ext: LensExtension) {
let registeredPages: RegisteredPage[] = [];
try {
registeredPages = items.map(page => ({
const pages = items.map(page => ({
...page,
extensionId: ext.name,
routePath: getExtensionPageUrl({ extensionId: ext.name, pageId: page.id ?? page.routePath }),
}));
return super.add(pages);
} catch (err) {
logger.error(`[EXTENSION]: page-registration failed`, {
items,
extension: ext,
error: String(err),
});
return noop;
}
return super.add(registeredPages);
}
getUrl<P extends object>({ extensionId, id: pageId }: RegisteredPage, params?: P) {

View File

@ -1,6 +1,5 @@
// Common usage utils & helpers
export const noop: any = Function();
export const isElectron = !!navigator.userAgent.match(/Electron/);
export * from "../../common/utils";