Typed catalog category events (#2812)

* typesafe catalog category events

Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com>

* use emit

Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com>

* rename events

Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com>
This commit is contained in:
Jari Kolehmainen authored and GitHub committed 2021-05-31 08:09:57 +03:00
1 parent c8e2f7ca2d
commit cd96842750
6 files changed
+26 -6

No files matched your search

@@ -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",
+9 -2
View File
@@ -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> = Entity extends CatalogEntity<infer Metadata> ? 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<CatalogCategoryEvents>) {
abstract readonly apiVersion: string;
abstract readonly kind: string;
abstract metadata: {
@@ -55,7 +55,7 @@ export class CatalogAddButton extends React.Component<CatalogAddButtonProps> {
menuItems: this.menuItems
};
category.emit("onCatalogAddMenu", context);
category.emit("catalogAddMenu", context);
}
}, { fireImmediately: true })
]);
@@ -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<CatalogEntityItem> {
}
loadAll() {
if (this.activeCategory) {
this.activeCategory.emit("load");
} else {
for (const category of catalogCategoryRegistry.items) {
category.emit("load");
}
}
return this.loadItems(() => this.entities);
}
}