diff --git a/package.json b/package.json index 25efb9f650..824cceb505 100644 --- a/package.json +++ b/package.json @@ -361,6 +361,7 @@ "ts-loader": "^7.0.5", "ts-node": "^8.10.2", "type-fest": "^1.0.2", + "typed-emitter": "^1.3.1", "typedoc": "0.17.0-3", "typedoc-plugin-markdown": "^2.4.0", "typeface-roboto": "^0.0.75", diff --git a/src/common/catalog-entities/kubernetes-cluster.ts b/src/common/catalog-entities/kubernetes-cluster.ts index 9375bb06e4..dc6d36d023 100644 --- a/src/common/catalog-entities/kubernetes-cluster.ts +++ b/src/common/catalog-entities/kubernetes-cluster.ts @@ -165,7 +165,7 @@ export class KubernetesClusterCategory extends CatalogCategory { constructor() { super(); - this.on("onCatalogAddMenu", (ctx: CatalogEntityAddMenuContext) => { + this.on("catalogAddMenu", (ctx: CatalogEntityAddMenuContext) => { ctx.menuItems.push({ icon: "text_snippet", title: "Add from kubeconfig", diff --git a/src/common/catalog/catalog-entity.ts b/src/common/catalog/catalog-entity.ts index f30a392464..afc15d4c64 100644 --- a/src/common/catalog/catalog-entity.ts +++ b/src/common/catalog/catalog-entity.ts @@ -19,7 +19,8 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -import { EventEmitter } from "events"; +import EventEmitter from "events"; +import type TypedEmitter from "typed-emitter"; import { observable, makeObservable } from "mobx"; type ExtractEntityMetadataType = Entity extends CatalogEntity ? Metadata : never; @@ -47,7 +48,13 @@ export interface CatalogCategorySpec { }; } -export abstract class CatalogCategory extends EventEmitter { +export interface CatalogCategoryEvents { + load: () => void; + catalogAddMenu: (context: CatalogEntityAddMenuContext) => void; + contextMenuOpen: (entity: CatalogEntity, context: CatalogEntityContextMenuContext) => void; +} + +export abstract class CatalogCategory extends (EventEmitter as new () => TypedEmitter) { abstract readonly apiVersion: string; abstract readonly kind: string; abstract metadata: { diff --git a/src/renderer/components/+catalog/catalog-add-button.tsx b/src/renderer/components/+catalog/catalog-add-button.tsx index c839f8dc26..25cd43239f 100644 --- a/src/renderer/components/+catalog/catalog-add-button.tsx +++ b/src/renderer/components/+catalog/catalog-add-button.tsx @@ -55,7 +55,7 @@ export class CatalogAddButton extends React.Component { menuItems: this.menuItems }; - category.emit("onCatalogAddMenu", context); + category.emit("catalogAddMenu", context); } }, { fireImmediately: true }) ]); diff --git a/src/renderer/components/+catalog/catalog-entity.store.ts b/src/renderer/components/+catalog/catalog-entity.store.ts index c681338bf9..c11374ede2 100644 --- a/src/renderer/components/+catalog/catalog-entity.store.ts +++ b/src/renderer/components/+catalog/catalog-entity.store.ts @@ -23,9 +23,8 @@ import { action, computed, IReactionDisposer, makeObservable, observable, reacti import { catalogEntityRegistry } from "../../api/catalog-entity-registry"; import type { CatalogEntity, CatalogEntityActionContext } from "../../api/catalog-entity"; import { ItemObject, ItemStore } from "../../item.store"; -import { CatalogCategory } from "../../../common/catalog"; +import { CatalogCategory, catalogCategoryRegistry } from "../../../common/catalog"; import { autoBind } from "../../../common/utils"; - export class CatalogEntityItem implements ItemObject { constructor(public entity: CatalogEntity) {} @@ -111,6 +110,14 @@ export class CatalogEntityStore extends ItemStore { } loadAll() { + if (this.activeCategory) { + this.activeCategory.emit("load"); + } else { + for (const category of catalogCategoryRegistry.items) { + category.emit("load"); + } + } + return this.loadItems(() => this.entities); } } diff --git a/yarn.lock b/yarn.lock index 871ab6fdb3..d19d8b3208 100644 --- a/yarn.lock +++ b/yarn.lock @@ -14413,6 +14413,11 @@ type-is@~1.6.17, type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" +typed-emitter@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/typed-emitter/-/typed-emitter-1.3.1.tgz#c98d71551a99d5f08ba9085ee44b8fc9b2357502" + integrity sha512-2h7utWyXgd2R2u2IuL8B4yu1gqMxbgUj2VS/MGVbFhEVQNJKXoQQoS5CBMh+eW31zFeSmDfEQ3qQf4xy5SlPVQ== + typedarray-to-buffer@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080"