mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
review comments
Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
parent
a3073cc99b
commit
97f2ecd88d
@ -82,7 +82,7 @@ export class ApiManager {
|
||||
});
|
||||
}
|
||||
|
||||
getStore<S extends KubeObjectStore<KubeObject>>(api: string | KubeApi<KubeObject>): S {
|
||||
getStore<S extends KubeObjectStore<KubeObject>>(api: string | KubeApi<KubeObject>): S | undefined {
|
||||
return this.stores.get(this.resolveApi(api)?.apiBase) as S;
|
||||
}
|
||||
}
|
||||
|
||||
@ -171,7 +171,7 @@ export class Table<Item> extends React.Component<TableProps<Item>> {
|
||||
});
|
||||
}
|
||||
|
||||
getContent() {
|
||||
private getContent() {
|
||||
const { items, renderRow, children } = this.props;
|
||||
const content = React.Children.toArray(children) as (TableRowElem | TableHeadElem)[];
|
||||
|
||||
|
||||
@ -37,10 +37,10 @@ export interface KubeObjectStoreLoadingParams<K extends KubeObject> {
|
||||
reqInit?: RequestInit;
|
||||
}
|
||||
|
||||
export abstract class KubeObjectStore<K extends KubeObject> extends ItemStore<K> {
|
||||
export abstract class KubeObjectStore<T extends KubeObject> extends ItemStore<T> {
|
||||
static defaultContext = observable.box<ClusterContext>(); // TODO: support multiple cluster contexts
|
||||
|
||||
abstract api: KubeApi<K>;
|
||||
abstract api: KubeApi<T>;
|
||||
public readonly limit?: number;
|
||||
public readonly bufferSize: number = 50000;
|
||||
@observable private loadedNamespaces?: string[];
|
||||
@ -64,7 +64,7 @@ export abstract class KubeObjectStore<K extends KubeObject> extends ItemStore<K>
|
||||
return KubeObjectStore.defaultContext.get();
|
||||
}
|
||||
|
||||
@computed get contextItems(): K[] {
|
||||
@computed get contextItems(): T[] {
|
||||
const namespaces = this.context?.contextNamespaces ?? [];
|
||||
|
||||
return this.items.filter(item => {
|
||||
@ -88,9 +88,9 @@ export abstract class KubeObjectStore<K extends KubeObject> extends ItemStore<K>
|
||||
return { limit };
|
||||
}
|
||||
|
||||
getStatuses?(items: K[]): Record<string, number>;
|
||||
getStatuses?(items: T[]): Record<string, number>;
|
||||
|
||||
getAllByNs(namespace: string | string[], strict = false): K[] {
|
||||
getAllByNs(namespace: string | string[], strict = false): T[] {
|
||||
const namespaces: string[] = [].concat(namespace);
|
||||
|
||||
if (namespaces.length) {
|
||||
@ -108,7 +108,7 @@ export abstract class KubeObjectStore<K extends KubeObject> extends ItemStore<K>
|
||||
return this.items.find(item => item.getId() === id);
|
||||
}
|
||||
|
||||
getByName(name: string, namespace?: string): K {
|
||||
getByName(name: string, namespace?: string): T {
|
||||
return this.items.find(item => {
|
||||
return item.getName() === name && (
|
||||
namespace ? item.getNs() === namespace : true
|
||||
@ -116,19 +116,19 @@ export abstract class KubeObjectStore<K extends KubeObject> extends ItemStore<K>
|
||||
});
|
||||
}
|
||||
|
||||
getByPath(path: string): K {
|
||||
getByPath(path: string): T {
|
||||
return this.items.find(item => item.selfLink === path);
|
||||
}
|
||||
|
||||
getByLabel(labels: string[] | { [label: string]: string }): K[] {
|
||||
getByLabel(labels: string[] | { [label: string]: string }): T[] {
|
||||
if (Array.isArray(labels)) {
|
||||
return this.items.filter((item: K) => {
|
||||
return this.items.filter((item: T) => {
|
||||
const itemLabels = item.getLabels();
|
||||
|
||||
return labels.every(label => itemLabels.includes(label));
|
||||
});
|
||||
} else {
|
||||
return this.items.filter((item: K) => {
|
||||
return this.items.filter((item: T) => {
|
||||
const itemLabels = item.metadata.labels || {};
|
||||
|
||||
return Object.entries(labels)
|
||||
@ -137,7 +137,7 @@ export abstract class KubeObjectStore<K extends KubeObject> extends ItemStore<K>
|
||||
}
|
||||
}
|
||||
|
||||
protected async loadItems({ namespaces, api, reqInit }: KubeObjectStoreLoadingParams<K>): Promise<K[]> {
|
||||
protected async loadItems({ namespaces, api, reqInit }: KubeObjectStoreLoadingParams<T>): Promise<T[]> {
|
||||
if (this.context?.cluster.isAllowedResource(api.kind)) {
|
||||
if (!api.isNamespaced) {
|
||||
return api.list({ reqInit }, this.query);
|
||||
@ -163,12 +163,12 @@ export abstract class KubeObjectStore<K extends KubeObject> extends ItemStore<K>
|
||||
return [];
|
||||
}
|
||||
|
||||
protected filterItemsOnLoad(items: K[]) {
|
||||
protected filterItemsOnLoad(items: T[]) {
|
||||
return items;
|
||||
}
|
||||
|
||||
@action
|
||||
async loadAll(options: { namespaces?: string[], merge?: boolean, reqInit?: RequestInit } = {}): Promise<void | K[]> {
|
||||
async loadAll(options: { namespaces?: string[], merge?: boolean, reqInit?: RequestInit } = {}): Promise<void | T[]> {
|
||||
await this.contextReady;
|
||||
this.isLoading = true;
|
||||
|
||||
@ -215,7 +215,7 @@ export abstract class KubeObjectStore<K extends KubeObject> extends ItemStore<K>
|
||||
}
|
||||
|
||||
@action
|
||||
protected mergeItems(partialItems: K[], { replace = false, updateStore = true, sort = true, filter = true } = {}): K[] {
|
||||
protected mergeItems(partialItems: T[], { replace = false, updateStore = true, sort = true, filter = true } = {}): T[] {
|
||||
let items = partialItems;
|
||||
|
||||
// update existing items
|
||||
@ -239,12 +239,12 @@ export abstract class KubeObjectStore<K extends KubeObject> extends ItemStore<K>
|
||||
if (error) this.reset();
|
||||
}
|
||||
|
||||
protected async loadItem(params: { name: string; namespace?: string }): Promise<K> {
|
||||
protected async loadItem(params: { name: string; namespace?: string }): Promise<T> {
|
||||
return this.api.get(params);
|
||||
}
|
||||
|
||||
@action
|
||||
async load(params: { name: string; namespace?: string }): Promise<K> {
|
||||
async load(params: { name: string; namespace?: string }): Promise<T> {
|
||||
const { name, namespace } = params;
|
||||
let item = this.getByName(name, namespace);
|
||||
|
||||
@ -265,11 +265,11 @@ export abstract class KubeObjectStore<K extends KubeObject> extends ItemStore<K>
|
||||
return this.load({ name, namespace });
|
||||
}
|
||||
|
||||
protected async createItem(params: { name: string; namespace?: string }, data?: Partial<K>): Promise<K> {
|
||||
protected async createItem(params: { name: string; namespace?: string }, data?: Partial<T>): Promise<T> {
|
||||
return this.api.create(params, data);
|
||||
}
|
||||
|
||||
async create(params: { name: string; namespace?: string }, data?: Partial<K>): Promise<K> {
|
||||
async create(params: { name: string; namespace?: string }, data?: Partial<T>): Promise<T> {
|
||||
const newItem = await this.createItem(params, data);
|
||||
const items = this.sortItems([...this.items, newItem]);
|
||||
|
||||
@ -278,7 +278,7 @@ export abstract class KubeObjectStore<K extends KubeObject> extends ItemStore<K>
|
||||
return newItem;
|
||||
}
|
||||
|
||||
async update(item: K, data: Partial<K>): Promise<K> {
|
||||
async update(item: T, data: Partial<T>): Promise<T> {
|
||||
const newItem = await item.update(data);
|
||||
|
||||
ensureObjectSelfLink(this.api, newItem);
|
||||
@ -290,7 +290,7 @@ export abstract class KubeObjectStore<K extends KubeObject> extends ItemStore<K>
|
||||
return newItem;
|
||||
}
|
||||
|
||||
async remove(item: K) {
|
||||
async remove(item: T) {
|
||||
await item.delete();
|
||||
this.items.remove(item);
|
||||
this.selectedItemsIds.delete(item.getId());
|
||||
@ -352,7 +352,7 @@ export abstract class KubeObjectStore<K extends KubeObject> extends ItemStore<K>
|
||||
};
|
||||
}
|
||||
|
||||
private watchNamespace(api: KubeApi<K>, namespace: string, abortController: AbortController) {
|
||||
private watchNamespace(api: KubeApi<T>, namespace: string, abortController: AbortController) {
|
||||
let timedRetry: NodeJS.Timeout;
|
||||
const watch = () => api.watch({
|
||||
namespace,
|
||||
@ -362,7 +362,7 @@ export abstract class KubeObjectStore<K extends KubeObject> extends ItemStore<K>
|
||||
|
||||
const { signal } = abortController;
|
||||
|
||||
const callback = (data: IKubeWatchEvent<K>, error: any) => {
|
||||
const callback = (data: IKubeWatchEvent<T>, error: any) => {
|
||||
if (!this.isLoaded || error instanceof DOMException) return;
|
||||
|
||||
if (error instanceof Response) {
|
||||
@ -410,7 +410,7 @@ export abstract class KubeObjectStore<K extends KubeObject> extends ItemStore<K>
|
||||
switch (type) {
|
||||
case "ADDED":
|
||||
case "MODIFIED":
|
||||
const newItem = new api.objectConstructor(object) as K;
|
||||
const newItem = new api.objectConstructor(object) as T;
|
||||
|
||||
if (!item) {
|
||||
items.push(newItem);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user