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

Convert store items to Map before events buffer manipulations

Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com>
This commit is contained in:
Alex Andreev 2022-03-31 13:52:41 +03:00
parent 31f4382c82
commit c72ceaaf72

View File

@ -377,7 +377,7 @@ export abstract class KubeObjectStore<T extends KubeObject> extends ItemStore<T>
// collect items from watch-api events to avoid UI blowing up with huge streams of data // collect items from watch-api events to avoid UI blowing up with huge streams of data
protected eventsBuffer = observable.array<IKubeWatchEvent<KubeJsonApiData>>([], { deep: false }); protected eventsBuffer = observable.array<IKubeWatchEvent<KubeJsonApiData>>([], { deep: false });
protected bindWatchEventsUpdater(delay = 1000) { protected bindWatchEventsUpdater(delay = 4000) {
reaction(() => this.eventsBuffer.length, this.updateFromEventsBuffer, { reaction(() => this.eventsBuffer.length, this.updateFromEventsBuffer, {
delay, delay,
}); });
@ -455,7 +455,9 @@ export abstract class KubeObjectStore<T extends KubeObject> extends ItemStore<T>
@action @action
protected updateFromEventsBuffer() { protected updateFromEventsBuffer() {
const items = this.getItems(); // const items = this.getItems();
const groupedItems: [string, T][] = this.getItems().map(item => [item.getId(), item]);
const items = new Map<string, T>(groupedItems);
for (const event of this.eventsBuffer.clear()) { for (const event of this.eventsBuffer.clear()) {
if (event.type === "ERROR") { if (event.type === "ERROR") {
@ -471,8 +473,9 @@ export abstract class KubeObjectStore<T extends KubeObject> extends ItemStore<T>
continue; continue;
} }
const index = items.findIndex(item => item.getId() === object.metadata.uid); // const index = items.findIndex(item => item.getId() === object.metadata.uid);
const item = items[index]; const { uid } = object.metadata;
const item = items.get(uid);
switch (type) { switch (type) {
case "ADDED": case "ADDED":
@ -482,16 +485,16 @@ export abstract class KubeObjectStore<T extends KubeObject> extends ItemStore<T>
const newItem = new this.api.objectConstructor(object); const newItem = new this.api.objectConstructor(object);
if (!item) { if (!item) {
items.push(newItem); items.set(uid, newItem);
} else { } else {
items[index] = newItem; items.set(uid, newItem);
} }
break; break;
} }
case "DELETED": case "DELETED":
if (item) { if (item) {
items.splice(index, 1); items.delete(uid);
} }
break; break;
} }
@ -500,7 +503,8 @@ export abstract class KubeObjectStore<T extends KubeObject> extends ItemStore<T>
} }
} }
// update items const updatedItems = Array.from(items.values());
this.items.replace(this.sortItems(items.slice(-this.bufferSize)));
this.items.replace(this.sortItems(updatedItems));
} }
} }