From 6ea67225e9be451ac1efa6ae888759c041b7b314 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Lyngs=C3=B8?= Date: Fri, 9 Feb 2024 20:08:48 +0100 Subject: [PATCH] move workspace modal registration --- .../block/context/block-entries.context.ts | 41 +++++++++++++++++-- .../block/context/block-entry.context.ts | 17 ++++---- .../block/context/block-manager.context.ts | 21 +--------- .../workspace/block-workspace.context.ts | 1 + 4 files changed, 48 insertions(+), 32 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entries.context.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entries.context.ts index 727ca0afae..4db308f448 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entries.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entries.context.ts @@ -1,12 +1,13 @@ import type { UmbBlockTypeBaseModel } from '../../block-type/types.js'; import type { UmbBlockDataType, UmbBlockLayoutBaseModel } from '../types.js'; -import type { UmbBlockWorkspaceData } from '../index.js'; +import { UMB_BLOCK_WORKSPACE_MODAL } from '../workspace/block-workspace.modal-token.js'; import type { UmbBlockDataObjectModel, UmbBlockManagerContext } from './block-manager.context.js'; import { UMB_BLOCK_ENTRIES_CONTEXT } from './block-entries.context-token.js'; import type { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; import { UmbContextBase } from '@umbraco-cms/backoffice/class-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; -import { UmbArrayState } from '@umbraco-cms/backoffice/observable-api'; +import { UmbArrayState, UmbStringState } from '@umbraco-cms/backoffice/observable-api'; +import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/modal'; export abstract class UmbBlockEntriesContext< BlockManagerContextTokenType extends UmbContextToken, @@ -20,6 +21,11 @@ export abstract class UmbBlockEntriesContext< _manager?: BlockManagerContextType; _retrieveManager; + #workspaceModal: UmbModalRouteRegistrationController; + + #workspacePath = new UmbStringState(undefined); + workspacePath = this.#workspacePath.asObservable(); + protected _layoutEntries = new UmbArrayState([], (x) => x.contentUdi); readonly layoutEntries = this._layoutEntries.asObservable(); readonly layoutEntriesLength = this._layoutEntries.asObservablePart((x) => x.length); @@ -31,7 +37,34 @@ export abstract class UmbBlockEntriesContext< this._retrieveManager = this.consumeContext(blockManagerContextToken, (blockGridManager) => { this._manager = blockGridManager; this._gotBlockManager(); + + this.observe( + this._manager.propertyAlias, + (alias) => { + this.#workspaceModal.setUniquePathValue('propertyAlias', alias); + }, + 'observePropertyAlias', + ); + this.observe( + this._manager.variantId, + (variantId) => { + // TODO: This might not be the property variant ID, but the content variant ID. Check up on what makes most sense? + this.#workspaceModal.setUniquePathValue('variantId', variantId?.toString()); + }, + 'observePropertyVariantId', + ); }).asPromise(); + + this.#workspaceModal = new UmbModalRouteRegistrationController(this, UMB_BLOCK_WORKSPACE_MODAL) + .addUniquePaths(['propertyAlias', 'variantId']) + .addAdditionalPath('block') + .onSetup(() => { + return { data: { entityType: 'block', preset: {} }, modal: { size: 'medium' } }; + }) + .observeRouteBuilder((routeBuilder) => { + const newPath = routeBuilder({}); + this.#workspacePath.setValue(newPath); + }); } protected abstract _gotBlockManager(): void; @@ -52,14 +85,14 @@ export abstract class UmbBlockEntriesContext< public abstract create( contentElementTypeKey: string, layoutEntry?: Omit, - modalData?: UmbBlockWorkspaceData, + modalData?: typeof UMB_BLOCK_WORKSPACE_MODAL.DATA, ): Promise | undefined>; abstract insert( layoutEntry: BlockLayoutType, content: UmbBlockDataType, settings: UmbBlockDataType | undefined, - modalData: UmbBlockWorkspaceData, + modalData: typeof UMB_BLOCK_WORKSPACE_MODAL.DATA, ): Promise; //edit? //editSettings diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entry.context.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entry.context.ts index 60409e809b..8ddb97407d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entry.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entry.context.ts @@ -130,9 +130,16 @@ export abstract class UmbBlockEntryContext< } #gotManager() { - if (this._manager) { + this.#observeBlockType(); + this.#observeData(); + } + + abstract _gotManager(): void; + + #gotEntries() { + if (this._entries) { this.observe( - this._manager.workspacePath, + this._entries.workspacePath, (workspacePath) => { this.#workspacePath.setValue(workspacePath); }, @@ -141,14 +148,8 @@ export abstract class UmbBlockEntryContext< } else { this.removeControllerByAlias('observeWorkspacePath'); } - this.#observeBlockType(); - this.#observeData(); } - abstract _gotManager(): void; - - #gotEntries() {} - abstract _gotEntries(): void; #observeData() { diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-manager.context.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-manager.context.ts index 22b99ceec5..ad41087a61 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-manager.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-manager.context.ts @@ -5,8 +5,7 @@ import { UmbArrayState, UmbClassState, UmbStringState } from '@umbraco-cms/backo import { UmbDocumentTypeDetailRepository } from '@umbraco-cms/backoffice/document-type'; import { buildUdi, getKeyFromUdi } from '@umbraco-cms/backoffice/utils'; import type { UmbBlockTypeBaseModel, UmbBlockWorkspaceData } from '@umbraco-cms/backoffice/block'; -import { UMB_BLOCK_MANAGER_CONTEXT, UMB_BLOCK_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/block'; -import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/modal'; +import { UMB_BLOCK_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/block'; import type { UmbContentTypeModel } from '@umbraco-cms/backoffice/content-type'; import { UmbId } from '@umbraco-cms/backoffice/id'; import type { UmbPropertyEditorConfigCollection } from '@umbraco-cms/backoffice/property-editor'; @@ -24,10 +23,6 @@ export abstract class UmbBlockManagerContext< > extends UmbContextBase { // #contentTypeRepository = new UmbDocumentTypeDetailRepository(this); - #workspaceModal: UmbModalRouteRegistrationController; - - #workspacePath = new UmbStringState(undefined); - workspacePath = this.#workspacePath.asObservable(); #propertyAlias = new UmbStringState(undefined); propertyAlias = this.#propertyAlias.asObservable(); @@ -92,7 +87,6 @@ export abstract class UmbBlockManagerContext< propertyContext?.alias, (alias) => { this.#propertyAlias.setValue(alias); - this.#workspaceModal.setUniquePathValue('propertyAlias', alias); }, 'observePropertyAlias', ); @@ -100,23 +94,10 @@ export abstract class UmbBlockManagerContext< propertyContext?.variantId, (variantId) => { this.#variantId.setValue(variantId); - // TODO: This might not be the property variant ID, but the content variant ID. Check up on what makes most sense? - this.#workspaceModal.setUniquePathValue('variantId', variantId?.toString()); }, 'observePropertyVariantId', ); }); - - this.#workspaceModal = new UmbModalRouteRegistrationController(this, UMB_BLOCK_WORKSPACE_MODAL) - .addUniquePaths(['propertyAlias', 'variantId']) - .addAdditionalPath('block') - .onSetup(() => { - return { data: { entityType: 'block', preset: {} }, modal: { size: 'medium' } }; - }) - .observeRouteBuilder((routeBuilder) => { - const newPath = routeBuilder({}); - this.#workspacePath.setValue(newPath); - }); } async ensureContentType(unique?: string) { diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/block-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/block-workspace.context.ts index 951e761bcd..c18318d1e3 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/block-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/block-workspace.context.ts @@ -77,6 +77,7 @@ export class UmbBlockWorkspaceContext< }).asPromise(); this.#retrieveBlockEntries = this.consumeContext(UMB_BLOCK_ENTRIES_CONTEXT, (context) => { + console.log('UMB_BLOCK_ENTRIES_CONTEXT', context); this.#blockEntries = context; }).asPromise(); }