From 9ec1635319deb4893cbfb223cec037e66a6529bc Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Sun, 19 May 2024 20:31:13 +0200 Subject: [PATCH] listen for event in collection --- .../default/collection-default.context.ts | 34 +++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/collection/default/collection-default.context.ts b/src/Umbraco.Web.UI.Client/src/packages/core/collection/default/collection-default.context.ts index e4bdac436e..542304592c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/collection/default/collection-default.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/collection/default/collection-default.context.ts @@ -18,9 +18,13 @@ import { UmbSelectionManager, UmbPaginationManager } from '@umbraco-cms/backoffi import type { ManifestCollection, ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; import type { UmbApi } from '@umbraco-cms/backoffice/extension-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; -import { UmbRequestReloadStructureForEntityEvent } from '@umbraco-cms/backoffice/entity-action'; +import { + UmbRequestReloadChildrenOfEntityEvent, + UmbRequestReloadStructureForEntityEvent, +} from '@umbraco-cms/backoffice/entity-action'; import type { UmbActionEventContext } from '@umbraco-cms/backoffice/action'; import { UMB_ACTION_EVENT_CONTEXT } from '@umbraco-cms/backoffice/action'; +import { UMB_ENTITY_CONTEXT } from '@umbraco-cms/backoffice/entity'; const LOCAL_STORAGE_KEY = 'umb-collection-view'; @@ -88,10 +92,20 @@ export class UmbDefaultCollectionContext< this.#onReloadStructureRequest as unknown as EventListener, ); + context?.removeEventListener( + UmbRequestReloadChildrenOfEntityEvent.TYPE, + this.#onReloadChildrenRequest as unknown as EventListener, + ); + context?.addEventListener( UmbRequestReloadStructureForEntityEvent.TYPE, this.#onReloadStructureRequest as unknown as EventListener, ); + + context?.addEventListener( + UmbRequestReloadChildrenOfEntityEvent.TYPE, + this.#onReloadChildrenRequest as unknown as EventListener, + ); }); } @@ -246,7 +260,7 @@ export class UmbDefaultCollectionContext< localStorage.setItem(LOCAL_STORAGE_KEY, JSON.stringify(layouts)); } - #onReloadStructureRequest = async (event: UmbRequestReloadStructureForEntityEvent) => { + #onReloadStructureRequest = (event: UmbRequestReloadStructureForEntityEvent) => { const items = this.#items.getValue(); const hasItem = items.some((item) => item.unique === event.getUnique()); if (hasItem) { @@ -254,12 +268,28 @@ export class UmbDefaultCollectionContext< } }; + #onReloadChildrenRequest = async (event: UmbRequestReloadChildrenOfEntityEvent) => { + // check if the collection is in the same context as the entity from the event + const entityContext = await this.getContext(UMB_ENTITY_CONTEXT); + const unique = entityContext.getUnique(); + const entityType = entityContext.getEntityType(); + + if (unique === event.getUnique() && entityType === event.getEntityType()) { + this.requestCollection(); + } + }; + destroy(): void { this.#actionEventContext?.removeEventListener( UmbRequestReloadStructureForEntityEvent.TYPE, this.#onReloadStructureRequest as unknown as EventListener, ); + this.#actionEventContext?.removeEventListener( + UmbRequestReloadChildrenOfEntityEvent.TYPE, + this.#onReloadChildrenRequest as unknown as EventListener, + ); + super.destroy(); } }