diff --git a/src/renderer/components/+catalog/catalog-add-button.tsx b/src/renderer/components/+catalog/catalog-add-button.tsx index 87e9405673..77354b06f9 100644 --- a/src/renderer/components/+catalog/catalog-add-button.tsx +++ b/src/renderer/components/+catalog/catalog-add-button.tsx @@ -35,10 +35,12 @@ export type CatalogAddButtonProps = { category: CatalogCategory }; +type categoryId = string; + @observer export class CatalogAddButton extends React.Component { @observable protected isOpen = false; - @observable menuItems: CatalogEntityAddMenu[] = []; + @observable menuItems = new Map(); constructor(props: CatalogAddButtonProps) { super(props); @@ -60,7 +62,7 @@ export class CatalogAddButton extends React.Component { } updateMenuItems() { - this.menuItems = []; + this.menuItems.clear(); if (this.props.category) { this.updateCategoryItems(this.props.category); @@ -72,17 +74,22 @@ export class CatalogAddButton extends React.Component { @action updateCategoryItems = (category: CatalogCategory) => { - const context: CatalogEntityAddMenuContext = { - navigate: (url: string) => navigate(url), - menuItems: this.menuItems - }; - if (category instanceof EventEmitter) { + const menuItems: CatalogEntityAddMenu[] = []; + const context: CatalogEntityAddMenuContext = { + navigate: (url: string) => navigate(url), + menuItems + }; + category.emit("catalogAddMenu", context); - this.menuItems = category.filteredItems(this.menuItems); + this.menuItems.set(category.getId(), menuItems); } }; + getCategoryFilteredItems = (category: CatalogCategory) => { + return category.filteredItems(this.menuItems.get(category.getId()) || []); + }; + @boundMethod onOpen() { this.isOpen = true; @@ -95,14 +102,21 @@ export class CatalogAddButton extends React.Component { @boundMethod onButtonClick() { - const defaultAction = this.menuItems.find(item => item.defaultAction)?.onClick; - const clickAction = defaultAction || (this.menuItems.length === 1 ? this.menuItems[0].onClick : null); + const defaultAction = this.items.find(item => item.defaultAction)?.onClick; + const clickAction = defaultAction || (this.items.length === 1 ? this.items[0].onClick : null); clickAction?.(); } + get items() { + const { category } = this.props; + + return category ? this.getCategoryFilteredItems(category) : + this.categories.map(this.getCategoryFilteredItems).flat(); + } + render() { - if (this.menuItems.length === 0) { + if (this.items.length === 0) { return null; } @@ -117,7 +131,7 @@ export class CatalogAddButton extends React.Component { direction="up" onClick={this.onButtonClick} > - {this.menuItems.map((menuItem, index) => { + {this.items.map((menuItem, index) => { return }