From 1048234d806b723006c9fe45d630efcfdcb9b9e9 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 27 Jan 2025 15:45:19 +0100 Subject: [PATCH] reload workspace on entity detail updated event --- .../entity-detail-updated.event.ts | 10 +++++++ .../src/packages/core/entity-action/index.ts | 1 + .../rollback/modal/rollback-modal.element.ts | 25 ++++++++++++++-- .../workspace/document-workspace.context.ts | 29 +++++++++++++++++++ 4 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/entity-action/entity-detail-updated.event.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/entity-detail-updated.event.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/entity-detail-updated.event.ts new file mode 100644 index 0000000000..259e3ed458 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/entity-detail-updated.event.ts @@ -0,0 +1,10 @@ +import type { UmbEntityActionEventArgs } from './entity-action.event.js'; +import { UmbEntityActionEvent } from './entity-action.event.js'; + +export class UmbEntityDetailUpdatedEvent extends UmbEntityActionEvent { + static readonly TYPE = 'entity-detail-updated'; + + constructor(args: UmbEntityActionEventArgs) { + super(UmbEntityDetailUpdatedEvent.TYPE, args); + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/index.ts index 4347644d1f..a1f34f7ee9 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/index.ts @@ -5,6 +5,7 @@ export * from './constants.js'; export * from './entity-action-base.js'; export * from './entity-action-list.element.js'; export * from './entity-action.event.js'; +export * from './entity-detail-updated.event.js'; export type * from './types.js'; export { UmbRequestReloadStructureForEntityEvent } from './request-reload-structure-for-entity.event.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/rollback/modal/rollback-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/rollback/modal/rollback-modal.element.ts index 2cca09b470..574434848b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/rollback/modal/rollback-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/rollback/modal/rollback-modal.element.ts @@ -15,6 +15,11 @@ import { UMB_ENTITY_CONTEXT } from '@umbraco-cms/backoffice/entity'; import { UmbVariantId } from '@umbraco-cms/backoffice/variant'; import '../../modals/shared/document-variant-language-picker.element.js'; +import { UMB_ACTION_EVENT_CONTEXT } from '@umbraco-cms/backoffice/action'; +import { + UmbEntityDetailUpdatedEvent, + UmbRequestReloadStructureForEntityEvent, +} from '@umbraco-cms/backoffice/entity-action'; type DocumentVersion = { id: string; @@ -187,12 +192,28 @@ export class UmbRollbackModalElement extends UmbModalBaseElement { + this.#eventContext = context; + + this.#eventContext.removeEventListener( + UmbEntityDetailUpdatedEvent.TYPE, + this.#onEntityDetailUpdatedEvent as unknown as EventListener, + ); + + this.#eventContext.addEventListener( + UmbEntityDetailUpdatedEvent.TYPE, + this.#onEntityDetailUpdatedEvent as unknown as EventListener, + ); + }); } override async load(unique: string) { @@ -326,6 +343,18 @@ export class UmbDocumentWorkspaceContext ): UmbDocumentPropertyDatasetContext { return new UmbDocumentPropertyDatasetContext(host, this, variantId); } + + // TODO: This is currently only a local implementation. Looks into a solution for all detail workspaces + #onEntityDetailUpdatedEvent = (event: UmbEntityDetailUpdatedEvent) => { + const eventUnique = event.getUnique(); + const eventEntityType = event.getEntityType(); + + // Ignore events for other entities + if (eventEntityType !== this.getEntityType()) return; + if (eventUnique !== this.getUnique()) return; + + this.load(this.getUnique()!); + }; } export default UmbDocumentWorkspaceContext;