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 5c401f6c37a3..6ac9729c10d1 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 @@ -14,11 +14,16 @@ import { type UmbClassInterface, UmbControllerBase } from '@umbraco-cms/backoffi import { UmbDocumentTypeDetailRepository } from '@umbraco-cms/backoffice/document-type'; import { UmbVariantId } from '@umbraco-cms/backoffice/variant'; import { UmbValidationController } from '@umbraco-cms/backoffice/validation'; -import { UmbElementWorkspaceDataManager, type UmbElementPropertyDataOwner } from '@umbraco-cms/backoffice/content'; +import { + UmbContentValidationToHintsManager, + UmbElementWorkspaceDataManager, + type UmbElementPropertyDataOwner, +} from '@umbraco-cms/backoffice/content'; import { UmbReadOnlyVariantGuardManager } from '@umbraco-cms/backoffice/utils'; import { UmbDataTypeItemRepositoryManager } from '@umbraco-cms/backoffice/data-type'; import { UmbVariantPropertyGuardManager } from '@umbraco-cms/backoffice/property'; +import { UmbHintContext, type UmbVariantHint } from '@umbraco-cms/backoffice/hint'; export class UmbBlockElementManager extends UmbControllerBase @@ -62,9 +67,21 @@ export class UmbBlockElementManager, dataPathPropertyName: string) { + readonly hints; + + constructor( + host: UmbBlockWorkspaceContext, + dataPathPropertyName: string, + workspaceViewAlias: string, + ) { super(host); + this.hints = new UmbHintContext(this, { viewAlias: workspaceViewAlias }); + this.hints.inherit(); + new UmbContentValidationToHintsManager(this, this.structure, this.validation, this.hints, [ + workspaceViewAlias, + ]); + // Ugly, but we just inherit these from the workspace context: [NL] this.name = host.name; this.getName = host.getName; @@ -241,6 +258,8 @@ export class UmbBlockElementManager @@ -58,9 +59,8 @@ export class UmbBlockWorkspaceContext x?.contentKey); readonly contentKey = this.#layout.asObservablePart((x) => x?.contentKey); - readonly content = new UmbBlockElementManager(this, 'contentData'); - - readonly settings = new UmbBlockElementManager(this, 'settingsData'); + readonly content = new UmbBlockElementManager(this, 'contentData', UMB_BLOCK_WORKSPACE_VIEW_CONTENT); + readonly settings = new UmbBlockElementManager(this, 'settingsData', UMB_BLOCK_WORKSPACE_VIEW_SETTINGS); #name = new UmbStringState(undefined); readonly name = this.#name.asObservable(); diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/constants.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/constants.ts new file mode 100644 index 000000000000..f0ecc0004679 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/constants.ts @@ -0,0 +1,4 @@ +export const UMB_BLOCK_WORKSPACE_ALIAS = 'Umb.Workspace.Block'; + +export const UMB_BLOCK_WORKSPACE_VIEW_CONTENT = 'Umb.WorkspaceView.Block.Content'; +export const UMB_BLOCK_WORKSPACE_VIEW_SETTINGS = 'Umb.WorkspaceView.Block.Settings'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/index.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/index.ts index 533b373c45ab..4fd2a462aa05 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/index.ts @@ -1,5 +1,4 @@ export * from './block-element-property-dataset.context-token.js'; export * from './block-workspace.context-token.js'; export * from './block-workspace.modal-token.js'; - -export const UMB_BLOCK_WORKSPACE_ALIAS = 'Umb.Workspace.Block'; +export * from './constants.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/manifests.ts index 949a4312c61d..d3ac0faf73c6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/manifests.ts @@ -1,4 +1,8 @@ -import { UMB_BLOCK_WORKSPACE_ALIAS } from './index.js'; +import { + UMB_BLOCK_WORKSPACE_ALIAS, + UMB_BLOCK_WORKSPACE_VIEW_CONTENT, + UMB_BLOCK_WORKSPACE_VIEW_SETTINGS, +} from './constants.js'; import { UMB_WORKSPACE_CONDITION_ALIAS, UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; export const manifests: Array = [ @@ -57,7 +61,7 @@ export const manifests: Array = [ }, { type: 'workspaceView', - alias: 'Umb.WorkspaceView.Block.Content', + alias: UMB_BLOCK_WORKSPACE_VIEW_CONTENT, name: 'Block Workspace Content View', element: () => import('./views/edit/block-workspace-view-edit.element.js'), weight: 1000, @@ -83,7 +87,7 @@ export const manifests: Array = [ // TODO: Fix manifest types so it support additional properties. { type: 'workspaceView', - alias: 'Umb.WorkspaceView.Block.Settings', + alias: UMB_BLOCK_WORKSPACE_VIEW_SETTINGS, name: 'Block Workspace Settings View', element: () => import('./views/edit/block-workspace-view-edit.element.js'), weight: 900, diff --git a/src/Umbraco.Web.UI.Client/src/packages/content/content/workspace/content-validation-to-hints.manager.ts b/src/Umbraco.Web.UI.Client/src/packages/content/content/workspace/content-validation-to-hints.manager.ts index 8dcd90539b4d..2811bebfa7fd 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/content/content/workspace/content-validation-to-hints.manager.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/content/content/workspace/content-validation-to-hints.manager.ts @@ -6,7 +6,7 @@ import type { } from '@umbraco-cms/backoffice/content-type'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import type { UmbHintController, UmbVariantHint } from '@umbraco-cms/backoffice/hint'; -import { extractJsonQueryProps, type UmbValidationContext } from '@umbraco-cms/backoffice/validation'; +import { extractJsonQueryProps, type UmbValidationController } from '@umbraco-cms/backoffice/validation'; import { UmbVariantId } from '@umbraco-cms/backoffice/variant'; /* @@ -39,8 +39,9 @@ export class UmbContentValidationToHintsManager< constructor( host: UmbControllerHost, structure: UmbContentTypeStructureManager, - validation: UmbValidationContext, + validation: UmbValidationController, hints: UmbHintController, + hintsPathPrefix: Array = ['Umb.WorkspaceView.Document.Edit'], ) { super(host); @@ -77,7 +78,7 @@ export class UmbContentValidationToHintsManager< hints.addOne({ unique: message.key, - path: ['Umb.WorkspaceView.Document.Edit', ...path], + path: [...hintsPathPrefix, ...path], text: '!', /*label: message.body,*/ color: 'invalid', diff --git a/src/Umbraco.Web.UI.Client/src/packages/content/content/workspace/index.ts b/src/Umbraco.Web.UI.Client/src/packages/content/content/workspace/index.ts index 40d5ffc230f9..842875330580 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/content/content/workspace/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/content/content/workspace/index.ts @@ -1,2 +1,3 @@ export * from './content-detail-workspace-base.js'; +export * from './content-validation-to-hints.manager.js'; export type * from './content-workspace-context.interface.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/hint/context/hints.context.ts b/src/Umbraco.Web.UI.Client/src/packages/core/hint/context/hints.context.ts index 87025e2717f2..3a9875d47c19 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/hint/context/hints.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/hint/context/hints.context.ts @@ -1,6 +1,6 @@ import type { UmbHint, UmbIncomingHintBase } from '../types.js'; import { UMB_HINT_CONTEXT } from './hint.context-token.js'; -import { UmbHintController } from './hints.controller.js'; +import { UmbHintController, type UmbHintControllerArgs } from './hints.controller.js'; import type { UmbPartialSome } from '@umbraco-cms/backoffice/utils'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; @@ -8,8 +8,8 @@ export class UmbHintContext< HintType extends UmbHint = UmbHint, IncomingHintType extends UmbIncomingHintBase = UmbPartialSome, > extends UmbHintController { - constructor(host: UmbControllerHost) { - super(host); + constructor(host: UmbControllerHost, args?: UmbHintControllerArgs) { + super(host, args); this.provideContext(UMB_HINT_CONTEXT, this as unknown as UmbHintContext); } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/hint/context/hints.controller.ts b/src/Umbraco.Web.UI.Client/src/packages/core/hint/context/hints.controller.ts index d655c10ae399..6b9f3ba1e63e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/hint/context/hints.controller.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/hint/context/hints.controller.ts @@ -6,6 +6,11 @@ import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { UmbArrayState, UmbObjectState, type Observable } from '@umbraco-cms/backoffice/observable-api'; import type { UmbContextProviderController } from '@umbraco-cms/backoffice/context-api'; +export interface UmbHintControllerArgs { + viewAlias?: string; + scaffold?: Partial; +} + export class UmbHintController< HintType extends UmbHint = UmbHint, IncomingHintType extends UmbIncomingHintBase = UmbPartialSome, @@ -35,7 +40,7 @@ export class UmbHintController< return this.#scaffold.getValue(); } - constructor(host: UmbControllerHost, args?: { viewAlias?: string; scaffold?: Partial }) { + constructor(host: UmbControllerHost, args?: UmbHintControllerArgs) { super(host); this.#viewAlias = args?.viewAlias;