From f66013afe31c1429ea444dabc54698eb2cc422df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Lyngs=C3=B8?= Date: Tue, 16 Jan 2024 10:55:19 +0100 Subject: [PATCH] plumbing block data --- .../block/manager/block-manager.context.ts | 11 +++++ .../block/workspace/block-element-manager.ts | 2 +- .../workspace/block-workspace.context.ts | 44 +++++++++++++------ 3 files changed, 43 insertions(+), 14 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block/manager/block-manager.context.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block/manager/block-manager.context.ts index ca144c58b4..cbda82520e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block/manager/block-manager.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block/manager/block-manager.context.ts @@ -88,6 +88,7 @@ export class UmbBlockManagerContext< source.find((x) => x.contentElementTypeKey === contentTypeKey), ); } + layoutOf(contentUdi: string) { return this.#layouts.asObservablePart((source) => source.find((x) => x.contentUdi === contentUdi)); } @@ -98,6 +99,16 @@ export class UmbBlockManagerContext< return this.#settings.asObservablePart((source) => source.find((x) => x.udi === udi)); } + updateLayout(contentUdi: string, layoutData: Partial) { + return this.#layouts.updateOne(contentUdi, layoutData); + } + updateContent(udi: string, contentData: Partial) { + return this.#contents.updateOne(udi, contentData); + } + updateSettings(udi: string, settingsData: Partial) { + return this.#settings.updateOne(udi, settingsData); + } + createBlock(layoutEntry: BlockLayoutType, contentElementTypeKey: string) { // Find block type. const blockType = this.#blockTypes.value.find((x) => x.contentElementTypeKey === contentElementTypeKey); diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/block-element-manager.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/block-element-manager.ts index 933a196a99..e31a4adc59 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/block-element-manager.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/block-element-manager.ts @@ -28,7 +28,7 @@ export class UmbBlockElementManager extends UmbBaseController { new UmbObserverController(this, this.contentTypeId, (id) => this.structure.loadType(id)); } - setData(data: UmbBlockDataType) { + setData(data: UmbBlockDataType | undefined) { this.#data.next(data); this.#getDataResolver(); } 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 a70eeea9a8..35f9628419 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 @@ -13,7 +13,7 @@ import { UmbId } from '@umbraco-cms/backoffice/id'; import { UMB_BLOCK_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/block'; export class UmbBlockWorkspaceContext - extends UmbEditableWorkspaceContextBase + extends UmbEditableWorkspaceContextBase> implements UmbSaveableWorkspaceContextInterface { // Just for context token safety: @@ -47,24 +47,42 @@ export class UmbBlockWorkspaceContext { - this.observe(context.value, (value) => { - /*if (value) { - const blockTypeData = value.find((x: UmbBlockTypeBase) => x.contentElementTypeKey === unique); - if (blockTypeData) { - this.#layout.next(blockTypeData); - return; + this.observe( + context.layoutOf(unique), + (layoutData) => { + // + // Content: + const contentUdi = layoutData?.contentUdi; + if (contentUdi) { + this.observe( + context.contentOf(contentUdi), + (contentData) => { + this.content.setData(contentData); + }, + 'observeContent', + ); } - } - // Fallback to undefined: - this.#layout.next(undefined); - */ - }); + + // Settings: + const settingsUdi = layoutData?.settingsUdi; + if (settingsUdi) { + this.observe( + context.contentOf(settingsUdi), + (settingsData) => { + this.content.setData(settingsData); + }, + 'observeSettings', + ); + } + }, + 'observeLayout', + ); }); }