From f3f2d9db72290d23ffdc464a193305f3b3b65822 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Lyngs=C3=B8?= Date: Wed, 7 Feb 2024 12:44:36 +0100 Subject: [PATCH] more structural changes --- .../context/block-grid-entries.context.ts | 41 +++++--------- .../context/block-grid-entry.context.ts | 4 +- .../context/block-list-entry.context.ts | 4 +- .../block/context/block-entities.context.ts | 36 ------------- .../context/block-entries.context-token.ts | 14 +++++ .../block/context/block-entries.context.ts | 54 +++++++++++++++++++ .../context/block-entry.context-token.ts | 7 +++ ...tity.context.ts => block-entry.context.ts} | 14 ++--- .../src/packages/block/block/context/index.ts | 9 ++-- .../src/packages/block/block/index.ts | 1 - .../workspace/block-workspace.context.ts | 2 +- 11 files changed, 104 insertions(+), 82 deletions(-) delete mode 100644 src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entities.context.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entries.context-token.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entries.context.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entry.context-token.ts rename src/Umbraco.Web.UI.Client/src/packages/block/block/context/{block-entity.context.ts => block-entry.context.ts} (92%) diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/context/block-grid-entries.context.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/context/block-grid-entries.context.ts index 070c3bb64b..cf04bffb05 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/context/block-grid-entries.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/context/block-grid-entries.context.ts @@ -1,29 +1,19 @@ -import { UMB_BLOCK_CATALOGUE_MODAL } from '../../block/index.js'; +import { UMB_BLOCK_CATALOGUE_MODAL, UmbBlockEntriesContext } from '../../block/index.js'; import { UMB_BLOCK_GRID_MANAGER_CONTEXT } from './block-grid-manager.context.js'; -import type { UmbBlockGridLayoutModel } from '../types.js'; -import { UMB_BLOCK_GRID_ENTRIES_CONTEXT } from './block-grid-entries.context-token.js'; -import { UMB_BLOCK_GRID_ENTRY_CONTEXT } from './block-grid-entry.context-token.js'; -import { UmbContextBase } from '@umbraco-cms/backoffice/class-api'; +import type { UmbBlockGridLayoutModel, UmbBlockGridTypeModel } from '../types.js'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { type UmbModalRouteBuilder, UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/modal'; -import { UmbArrayState } from '@umbraco-cms/backoffice/observable-api'; -export class UmbBlockGridEntriesContext extends UmbContextBase { +export class UmbBlockGridEntriesContext extends UmbBlockEntriesContext< + typeof UMB_BLOCK_GRID_MANAGER_CONTEXT, + typeof UMB_BLOCK_GRID_MANAGER_CONTEXT.TYPE, + UmbBlockGridTypeModel, + UmbBlockGridLayoutModel +> { // - #blockManager?: typeof UMB_BLOCK_GRID_MANAGER_CONTEXT.TYPE; #catalogueModal: UmbModalRouteRegistrationController; #catalogueRouteBuilder?: UmbModalRouteBuilder; - #layoutEntries = new UmbArrayState([], (x) => x.contentUdi); - layoutEntries = this.#layoutEntries.asObservable(); - - setLayoutEntries(layoutEntries: Array) { - this.#layoutEntries.setValue(layoutEntries); - } - getLayoutEntries() { - return this.#layoutEntries.value; - } - setParentKey(contentUdi: string) { this.#catalogueModal.setUniquePathValue('parentUnique', contentUdi); } @@ -39,7 +29,7 @@ export class UmbBlockGridEntriesContext extends UmbContextBase { this.#catalogueRouteBuilder = routeBuilder; + // TODO: Trigger render update? }); - - // TODO: Observe Blocks of the layout entries of this component. - this.consumeContext(UMB_BLOCK_GRID_MANAGER_CONTEXT, (blockGridManager) => { - this.#blockManager = blockGridManager; - this.#gotBlockManager(); - }); } - #gotBlockManager() { - if (!this.#blockManager) return; + protected _gotBlockManager() { + if (!this._manager) return; this.observe( - this.#blockManager.propertyAlias, + this._manager.propertyAlias, (alias) => { this.#catalogueModal.setUniquePathValue('propertyAlias', alias); }, diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/context/block-grid-entry.context.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/context/block-grid-entry.context.ts index 4ac7ceaffa..d1f8b12946 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/context/block-grid-entry.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/context/block-grid-entry.context.ts @@ -1,13 +1,13 @@ import { UMB_BLOCK_GRID_MANAGER_CONTEXT } from './block-grid-manager.context.js'; import { - UmbBlockContext, + UmbBlockEntryContext, type UmbBlockGridTypeModel, type UmbBlockGridLayoutModel, type UmbBlockGridLayoutAreaItemModel, } from '@umbraco-cms/backoffice/block'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { UmbArrayState } from '@umbraco-cms/backoffice/observable-api'; -export class UmbBlockGridEntryContext extends UmbBlockContext< +export class UmbBlockGridEntryContext extends UmbBlockEntryContext< typeof UMB_BLOCK_GRID_MANAGER_CONTEXT, typeof UMB_BLOCK_GRID_MANAGER_CONTEXT.TYPE, UmbBlockGridTypeModel, diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-list/context/block-list-entry.context.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-list/context/block-list-entry.context.ts index be16d0389f..b81a408baa 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block-list/context/block-list-entry.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-list/context/block-list-entry.context.ts @@ -1,8 +1,8 @@ import { UMB_BLOCK_LIST_MANAGER_CONTEXT } from './block-list-manager.context.js'; -import { UmbBlockContext } from '@umbraco-cms/backoffice/block'; +import { UmbBlockEntryContext } from '@umbraco-cms/backoffice/block'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { UmbBooleanState } from '@umbraco-cms/backoffice/observable-api'; -export class UmbBlockListEntryContext extends UmbBlockContext< +export class UmbBlockListEntryContext extends UmbBlockEntryContext< typeof UMB_BLOCK_LIST_MANAGER_CONTEXT, typeof UMB_BLOCK_LIST_MANAGER_CONTEXT.TYPE > { diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entities.context.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entities.context.ts deleted file mode 100644 index 42d7a36031..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entities.context.ts +++ /dev/null @@ -1,36 +0,0 @@ -import type { UmbBlockTypeBaseModel } from '../../block-type/types.js'; -import type { UmbBlockLayoutBaseModel } from '../types.js'; -import type { UMB_BLOCK_MANAGER_CONTEXT } from './block-manager.context-token.js'; -import type { UmbBlockManagerContext } from './block-manager.context.js'; -import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; -import { UmbContextBase } from '@umbraco-cms/backoffice/class-api'; -import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; - -export abstract class UmbBlockContext< - BlockManagerContextTokenType extends UmbContextToken, - BlockManagerContextType extends UmbBlockManagerContext, - BlockType extends UmbBlockTypeBaseModel = UmbBlockTypeBaseModel, - BlockLayoutType extends UmbBlockLayoutBaseModel = UmbBlockLayoutBaseModel, -> extends UmbContextBase< - UmbBlockContext -> { - // - _manager?: BlockManagerContextType; - - constructor(host: UmbControllerHost, blockManagerContextToken: BlockManagerContextTokenType) { - super(host, UMB_BLOCK_ENTITY_CONTEXT.toString()); - } - - // Public methods: - - //edit? - //editSettings - //requestDelete - //delete - // - should recursively delete all children of areas and their content/settings. - //copy -} - -export const UMB_BLOCK_ENTITY_CONTEXT = new UmbContextToken< - UmbBlockContext ->('UmbBlockEntryContext'); diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entries.context-token.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entries.context-token.ts new file mode 100644 index 0000000000..344d9b32fa --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entries.context-token.ts @@ -0,0 +1,14 @@ +import type { UmbBlockTypeBaseModel } from '../../block-type/types.js'; +import type { UmbBlockLayoutBaseModel } from '../types.js'; +import type { UmbBlockEntriesContext } from './block-entries.context.js'; +import type { UmbBlockManagerContext } from './block-manager.context.js'; +import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; + +export const UMB_BLOCK_ENTRIES_CONTEXT = new UmbContextToken< + typeof UmbBlockEntriesContext< + UmbContextToken, + UmbBlockManagerContext, + UmbBlockTypeBaseModel, + UmbBlockLayoutBaseModel + > +>('UmbBlockEntriesContext'); 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 new file mode 100644 index 0000000000..02888ac945 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entries.context.ts @@ -0,0 +1,54 @@ +import type { UmbBlockTypeBaseModel } from '../../block-type/types.js'; +import type { UmbBlockLayoutBaseModel } from '../types.js'; +import type { 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'; + +export abstract class UmbBlockEntriesContext< + BlockManagerContextTokenType extends UmbContextToken, + BlockManagerContextType extends UmbBlockManagerContext, + BlockType extends UmbBlockTypeBaseModel = UmbBlockTypeBaseModel, + BlockLayoutType extends UmbBlockLayoutBaseModel = UmbBlockLayoutBaseModel, +> extends UmbContextBase< + UmbBlockEntriesContext +> { + // + _manager?: BlockManagerContextType; + + #layoutEntries = new UmbArrayState([], (x) => x.contentUdi); + layoutEntries = this.#layoutEntries.asObservable(); + + setLayoutEntries(layoutEntries: Array) { + this.#layoutEntries.setValue(layoutEntries); + } + getLayoutEntries() { + return this.#layoutEntries.value; + } + + constructor(host: UmbControllerHost, blockManagerContextToken: BlockManagerContextTokenType) { + super(host, UMB_BLOCK_ENTRIES_CONTEXT.toString()); + + // TODO: Observe Blocks of the layout entries of this component. + this.consumeContext(blockManagerContextToken, (blockGridManager) => { + this._manager = blockGridManager; + this._gotBlockManager(); + }); + } + + protected abstract _gotBlockManager(): void; + + // Public methods: + + public abstract getPathForCreateBlock(index: number): string | undefined; + public abstract getPathForClipboard(index: number): string | undefined; + + //edit? + //editSettings + //requestDelete + //delete + // - should recursively delete all children of areas and their content/settings. + //copy +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entry.context-token.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entry.context-token.ts new file mode 100644 index 0000000000..0126cdbb5d --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entry.context-token.ts @@ -0,0 +1,7 @@ +import type { UmbBlockEntryContext } from './block-entry.context.js'; +import type { UMB_BLOCK_MANAGER_CONTEXT } from './block-manager.context-token.js'; +import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; + +export const UMB_BLOCK_ENTRY_CONTEXT = new UmbContextToken< + UmbBlockEntryContext +>('UmbBlockEntryContext'); diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entity.context.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entry.context.ts similarity index 92% rename from src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entity.context.ts rename to src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entry.context.ts index 4a031d2a94..76961611d1 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entity.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entry.context.ts @@ -1,20 +1,20 @@ import type { UmbBlockTypeBaseModel } from '../../block-type/types.js'; import type { UmbBlockLayoutBaseModel, UmbBlockDataType } from '../types.js'; -import type { UMB_BLOCK_MANAGER_CONTEXT, UmbBlockManagerContext } from '../manager/index.js'; -import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; +import { UMB_BLOCK_ENTRY_CONTEXT, type UmbBlockManagerContext } from '../index.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 { UmbObjectState, UmbStringState } from '@umbraco-cms/backoffice/observable-api'; import { encodeFilePath } from '@umbraco-cms/backoffice/utils'; import { UMB_CONFIRM_MODAL, UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; -export abstract class UmbBlockContext< +export abstract class UmbBlockEntryContext< BlockManagerContextTokenType extends UmbContextToken, BlockManagerContextType extends UmbBlockManagerContext, BlockType extends UmbBlockTypeBaseModel = UmbBlockTypeBaseModel, BlockLayoutType extends UmbBlockLayoutBaseModel = UmbBlockLayoutBaseModel, > extends UmbContextBase< - UmbBlockContext + UmbBlockEntryContext > { // _manager?: BlockManagerContextType; @@ -72,7 +72,7 @@ export abstract class UmbBlockContext< } constructor(host: UmbControllerHost, blockManagerContextToken: BlockManagerContextTokenType) { - super(host, UMB_BLOCK_ENTITY_CONTEXT.toString()); + super(host, UMB_BLOCK_ENTRY_CONTEXT.toString()); // Consume block manager: this.consumeContext(blockManagerContextToken, (manager) => { @@ -229,7 +229,3 @@ export abstract class UmbBlockContext< //copy } - -export const UMB_BLOCK_ENTITY_CONTEXT = new UmbContextToken< - UmbBlockContext ->('UmbBlockEntryContext'); diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block/context/index.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block/context/index.ts index a8f56966ab..2f13512f99 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block/context/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block/context/index.ts @@ -1,3 +1,6 @@ -export * from './block-entity.context.js'; -export * from '../block-manager.context-token.js'; -export type * from '../block-manager.context.js'; +export * from './block-entry.context-token.js'; +export * from './block-entry.context.js'; +export * from './block-entries.context-token.js'; +export * from './block-entries.context.js'; +export * from './block-manager.context-token.js'; +export type * from './block-manager.context.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block/index.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block/index.ts index abccb4df2a..c056977285 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block/index.ts @@ -1,6 +1,5 @@ export * from './conditions/index.js'; export * from './context/index.js'; -export * from './manager/index.js'; export * from './modals/index.js'; export * from './types.js'; export * from './workspace/index.js'; 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 7ca25276ba..3582efd244 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 @@ -6,7 +6,7 @@ import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import type { ManifestWorkspace } from '@umbraco-cms/backoffice/extension-registry'; import { UmbId } from '@umbraco-cms/backoffice/id'; import type { UmbBlockWorkspaceData } from '@umbraco-cms/backoffice/block'; -import type { UMB_BLOCK_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/block'; +import { UMB_BLOCK_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/block'; import { buildUdi } from '@umbraco-cms/backoffice/utils'; import { UMB_MODAL_CONTEXT } from '@umbraco-cms/backoffice/modal';