diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/entity-actions-bundle/entity-actions-bundle.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/entity-actions-bundle/entity-actions-bundle.element.ts index c696d25743..a9f1b10729 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/components/entity-actions-bundle/entity-actions-bundle.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/entity-actions-bundle/entity-actions-bundle.element.ts @@ -4,9 +4,10 @@ import { html, nothing, customElement, property, state, ifDefined } from '@umbra import type { UmbSectionSidebarContext } from '@umbraco-cms/backoffice/section'; import { UMB_SECTION_SIDEBAR_CONTEXT } from '@umbraco-cms/backoffice/section'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; -import type { ManifestEntityActionDefaultKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestEntityAction, ManifestEntityActionDefaultKind } from '@umbraco-cms/backoffice/extension-registry'; import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry'; -import { createExtensionApi } from '@umbraco-cms/backoffice/extension-api'; +import { UmbExtensionsManifestInitializer, createExtensionApi } from '@umbraco-cms/backoffice/extension-api'; +import { UmbEntityContext } from '../../entity/entity.context'; @customElement('umb-entity-actions-bundle') export class UmbEntityActionsBundleElement extends UmbLitElement { @@ -30,6 +31,8 @@ export class UmbEntityActionsBundleElement extends UmbLitElement { #sectionSidebarContext?: UmbSectionSidebarContext; + #entityContext = new UmbEntityContext(this); + constructor() { super(); @@ -40,26 +43,35 @@ export class UmbEntityActionsBundleElement extends UmbLitElement { protected updated(_changedProperties: PropertyValueMap | Map): void { if (_changedProperties.has('entityType') && _changedProperties.has('unique')) { + this.#entityContext.setEntityType(this.entityType); + this.#entityContext.setUnique(this.unique); this.#observeEntityActions(); } } #observeEntityActions() { - this.observe( - umbExtensionsRegistry.byTypeAndFilter('entityAction', (ext) => ext.forEntityTypes.includes(this.entityType!)), + new UmbExtensionsManifestInitializer( + this, + umbExtensionsRegistry, + 'entityAction', + (ext) => ext.forEntityTypes.includes(this.entityType!), async (actions) => { this._numberOfActions = actions.length; this._firstActionManifest = - this._numberOfActions > 0 ? (actions[0] as ManifestEntityActionDefaultKind) : undefined; - if (!this._firstActionManifest) return; - this._firstActionApi = await createExtensionApi(this, this._firstActionManifest, [ - { unique: this.unique, entityType: this.entityType, meta: this._firstActionManifest.meta }, - ]); + this._numberOfActions > 0 ? (actions[0].manifest as ManifestEntityActionDefaultKind) : undefined; + this.#createFirstActionApi(); }, 'umbEntityActionsObserver', ); } + async #createFirstActionApi() { + if (!this._firstActionManifest) return; + this._firstActionApi = await createExtensionApi(this, this._firstActionManifest, [ + { unique: this.unique, entityType: this.entityType, meta: this._firstActionManifest.meta }, + ]); + } + #openContextMenu() { if (!this.entityType) throw new Error('Entity type is not defined'); if (this.unique === undefined) throw new Error('Unique is not defined'); @@ -73,7 +85,7 @@ export class UmbEntityActionsBundleElement extends UmbLitElement { render() { if (this._numberOfActions === 0) return nothing; - return html` ${this.#renderFirstAction()} ${this.#renderMore()} `; + return html`${this.#renderMore()} ${this.#renderFirstAction()} `; } #renderMore() {