diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block/modals/block-catalogue/block-catalogue-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block/modals/block-catalogue/block-catalogue-modal.element.ts index 8cc4b3f4d6..6c65ce57e5 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block/modals/block-catalogue/block-catalogue-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block/modals/block-catalogue/block-catalogue-modal.element.ts @@ -1,8 +1,5 @@ import { UMB_BLOCK_WORKSPACE_MODAL } from '../../workspace/index.js'; -import { - DOCUMENT_TYPE_ITEM_REPOSITORY_ALIAS, - type UmbDocumentTypeItemModel, -} from '@umbraco-cms/backoffice/document-type'; +import { DOCUMENT_TYPE_ITEM_REPOSITORY_ALIAS } from '@umbraco-cms/backoffice/document-type'; import type { UmbBlockCatalogueModalData, UmbBlockCatalogueModalValue, @@ -10,7 +7,6 @@ import type { UmbBlockTypeWithGroupKey, } from '@umbraco-cms/backoffice/block'; import { css, html, customElement, state, repeat, ifDefined, nothing } from '@umbraco-cms/backoffice/external/lit'; -import { groupBy } from '@umbraco-cms/backoffice/external/lodash'; import { UMB_MODAL_CONTEXT, UmbModalBaseElement, @@ -23,17 +19,14 @@ export class UmbBlockCatalogueModalElement extends UmbModalBaseElement< UmbBlockCatalogueModalData, UmbBlockCatalogueModalValue > { - #itemManager = new UmbRepositoryItemsManager( + #itemManager = new UmbRepositoryItemsManager( this, DOCUMENT_TYPE_ITEM_REPOSITORY_ALIAS, - (x) => x.unique, + (x) => x.contentElementTypeKey, ); @state() - private _blocks: Array = []; - - @state() - private _blockGroups: Array = []; + private _groupedBlocks: Array<{ name?: string; blocks: Array }> = []; @state() _openClipboard?: boolean; @@ -60,19 +53,6 @@ export class UmbBlockCatalogueModalElement extends UmbModalBaseElement< this._workspacePath = routeBuilder({}); }); }); - - this.observe(this.#itemManager.items, (items) => { - this._blocks = items.map((item) => { - const blockGroup = this._blocks.find((block) => block.contentElementTypeKey === item.unique)?.groupKey; - const block: UmbBlockTypeWithGroupKey = { - contentElementTypeKey: item.unique, - label: item.name, - icon: item.icon ?? undefined, - groupKey: blockGroup, - }; - return block; - }); - }); } connectedCallback() { @@ -80,10 +60,17 @@ export class UmbBlockCatalogueModalElement extends UmbModalBaseElement< if (!this.data) return; this._openClipboard = this.data.openClipboard ?? false; - this._blocks = this.data.blocks ?? []; - this._blockGroups = this.data.blockGroups ?? []; - this.#itemManager.setUniques(this._blocks.map((x) => x.contentElementTypeKey)); + const blocks: Array = this.data.blocks ?? []; + const blockGroups: Array = this.data.blockGroups ?? []; + + const noGroupBlocks = blocks.filter((block) => !blockGroups.find((group) => group.key === block.groupKey)); + const grouped = blockGroups.map((group) => ({ + name: group.name ?? '', + blocks: blocks.filter((block) => block.groupKey === group.key), + })); + + this._groupedBlocks = [{ blocks: noGroupBlocks }, ...grouped]; } render() { @@ -107,15 +94,8 @@ export class UmbBlockCatalogueModalElement extends UmbModalBaseElement< } #renderCreateEmpty() { - const blockArrays = groupBy(this._blocks, 'groupKey'); - - const mappedGroupsAndBlocks = Object.entries(blockArrays).map(([key, value]) => { - const group = this._blockGroups.find((group) => group.key === key); - return { name: group?.name, blocks: value }; - }); - return html` - ${mappedGroupsAndBlocks.map( + ${this._groupedBlocks.map( (group) => html` ${group.name ? html`

${group.name}

` : nothing}
@@ -141,12 +121,18 @@ export class UmbBlockCatalogueModalElement extends UmbModalBaseElement< #renderViews() { return html` - (this._openClipboard = false)}> - Create Empty + (this._openClipboard = false)}> + Create Empty - (this._openClipboard = true)}> - Clipboard + (this._openClipboard = true)}> + Clipboard