Validation context for Block Workspace
This commit is contained in:
@@ -22,6 +22,7 @@
|
||||
"umbraco",
|
||||
"Uncategorized",
|
||||
"uninitialize",
|
||||
"unprovide",
|
||||
"variantable"
|
||||
],
|
||||
"exportall.config.folderListener": [],
|
||||
|
||||
@@ -4,8 +4,9 @@ import type { UmbContentTypeModel } from '@umbraco-cms/backoffice/content-type';
|
||||
import { UmbContentTypeStructureManager } from '@umbraco-cms/backoffice/content-type';
|
||||
import { UmbObjectState } from '@umbraco-cms/backoffice/observable-api';
|
||||
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
|
||||
import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api';
|
||||
import { type UmbClassInterface, UmbControllerBase } from '@umbraco-cms/backoffice/class-api';
|
||||
import { UmbDocumentTypeDetailRepository } from '@umbraco-cms/backoffice/document-type';
|
||||
import { UmbValidationContext } from '@umbraco-cms/backoffice/validation';
|
||||
|
||||
export class UmbBlockElementManager extends UmbControllerBase {
|
||||
//
|
||||
@@ -24,6 +25,8 @@ export class UmbBlockElementManager extends UmbControllerBase {
|
||||
new UmbDocumentTypeDetailRepository(this),
|
||||
);
|
||||
|
||||
readonly validation = new UmbValidationContext(this);
|
||||
|
||||
constructor(host: UmbControllerHost) {
|
||||
// TODO: Get Workspace Alias via Manifest.
|
||||
super(host);
|
||||
@@ -99,6 +102,13 @@ export class UmbBlockElementManager extends UmbControllerBase {
|
||||
return new UmbBlockElementPropertyDatasetContext(host, this);
|
||||
}
|
||||
|
||||
public setup(host: UmbClassInterface) {
|
||||
this.createPropertyDatasetContext(host);
|
||||
|
||||
// Provide Validation Context for this view:
|
||||
this.validation.provideAt(host);
|
||||
}
|
||||
|
||||
public override destroy(): void {
|
||||
this.#data.destroy();
|
||||
this.structure.destroy();
|
||||
|
||||
@@ -60,6 +60,9 @@ export class UmbBlockWorkspaceContext<LayoutDataType extends UmbBlockLayoutBaseM
|
||||
const manifest = workspaceArgs.manifest;
|
||||
this.#entityType = manifest.meta?.entityType;
|
||||
|
||||
this.addValidationContext(this.content.validation);
|
||||
this.addValidationContext(this.settings.validation);
|
||||
|
||||
this.#retrieveModalContext = this.consumeContext(UMB_MODAL_CONTEXT, (context) => {
|
||||
this.#modalContext = context;
|
||||
context.onSubmit().catch(this.#modalRejected);
|
||||
|
||||
@@ -69,8 +69,8 @@ export class UmbBlockWorkspaceViewEditElement extends UmbLitElement implements U
|
||||
const dataManager = this.#blockWorkspace[this.#managerName];
|
||||
this.#tabsStructureHelper.setStructureManager(dataManager.structure);
|
||||
|
||||
// Create Data Set:
|
||||
dataManager.createPropertyDatasetContext(this);
|
||||
// Create Data Set & setup Validation Context:
|
||||
dataManager.setup(this);
|
||||
|
||||
this.observe(
|
||||
this.#blockWorkspace![this.#managerName!].structure.hasRootContainers('Group'),
|
||||
|
||||
@@ -82,9 +82,12 @@ export class UmbValidationMessagesManager {
|
||||
this.#messages.append(messages.map((message) => ({ type, key: UmbId.new(), path, message })));
|
||||
}
|
||||
|
||||
/*appendMessages(messages: Array<UmbValidationMessage>): void {
|
||||
this.#messages.append(messages);
|
||||
}*/
|
||||
/*
|
||||
appendMessage(msg: UmbValidationMessage): void {
|
||||
const path = this.#translatePath(msg.path) ?? msg.path;
|
||||
this.#messages.appendOne({ ...msg, path });
|
||||
}
|
||||
*/
|
||||
|
||||
removeMessageByKey(key: string): void {
|
||||
this.#messages.removeOne(key);
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import { UmbContextProviderController } from '@umbraco-cms/backoffice/context-api';
|
||||
import type { UmbValidator } from '../interfaces/validator.interface.js';
|
||||
import { UmbValidationMessage, UmbValidationMessagesManager } from './validation-messages.manager.js';
|
||||
import { UMB_VALIDATION_CONTEXT } from './validation.context-token.js';
|
||||
import { UmbContextBase } from '@umbraco-cms/backoffice/class-api';
|
||||
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
|
||||
import { type UmbClassInterface, UmbControllerBase } from '@umbraco-cms/backoffice/class-api';
|
||||
|
||||
function ReplaceStartOfString(path: string, startFrom: string, startTo: string): string {
|
||||
if (path.startsWith(startFrom + '.')) {
|
||||
@@ -11,7 +11,10 @@ function ReplaceStartOfString(path: string, startFrom: string, startTo: string):
|
||||
return path;
|
||||
}
|
||||
|
||||
export class UmbValidationContext extends UmbContextBase<UmbValidationContext> implements UmbValidator {
|
||||
export class UmbValidationContext extends UmbControllerBase implements UmbValidator {
|
||||
// The current provider controller, that is providing this context:
|
||||
#providerCtrl?: UmbContextProviderController<UmbValidationContext, UmbValidationContext, UmbValidationContext>;
|
||||
|
||||
#validators: Array<UmbValidator> = [];
|
||||
#validationMode: boolean = false;
|
||||
#isValid: boolean = false;
|
||||
@@ -23,8 +26,18 @@ export class UmbValidationContext extends UmbContextBase<UmbValidationContext> i
|
||||
|
||||
public readonly messages = new UmbValidationMessagesManager();
|
||||
|
||||
constructor(host: UmbControllerHost) {
|
||||
super(host, UMB_VALIDATION_CONTEXT);
|
||||
/**
|
||||
* Provides the validation context to the current host, if not already provided to a different host.
|
||||
* @returns instance {UmbValidationContext} - Returns it self.
|
||||
*/
|
||||
provide(): UmbValidationContext {
|
||||
if (this.#providerCtrl) return this;
|
||||
this.provideContext(UMB_VALIDATION_CONTEXT, this);
|
||||
return this;
|
||||
}
|
||||
provideAt(controllerHost: UmbClassInterface): void {
|
||||
this.#providerCtrl?.destroy();
|
||||
this.#providerCtrl = controllerHost.provideContext(UMB_VALIDATION_CONTEXT, this);
|
||||
}
|
||||
|
||||
setDataPath(dataPath: string): void {
|
||||
|
||||
@@ -20,6 +20,11 @@ export abstract class UmbSubmittableWorkspaceContextBase<WorkspaceDataModelType>
|
||||
|
||||
//public readonly validation = new UmbValidationContext(this);
|
||||
#validationContexts: Array<UmbValidationContext> = [];
|
||||
|
||||
/**
|
||||
* Appends a validation context to the workspace.
|
||||
* @param context
|
||||
*/
|
||||
addValidationContext(context: UmbValidationContext) {
|
||||
this.#validationContexts.push(context);
|
||||
}
|
||||
|
||||
@@ -100,7 +100,7 @@ export class UmbDataTypeWorkspaceContext
|
||||
constructor(host: UmbControllerHost) {
|
||||
super(host, 'Umb.Workspace.DataType');
|
||||
|
||||
this.addValidationContext(new UmbValidationContext(this));
|
||||
this.addValidationContext(new UmbValidationContext(this).provide());
|
||||
|
||||
this.#observePropertyEditorSchemaAlias();
|
||||
this.#observePropertyEditorUIAlias();
|
||||
|
||||
@@ -163,7 +163,7 @@ export class UmbDocumentWorkspaceContext
|
||||
constructor(host: UmbControllerHost) {
|
||||
super(host, UMB_DOCUMENT_WORKSPACE_ALIAS);
|
||||
|
||||
this.addValidationContext(new UmbValidationContext(this));
|
||||
this.addValidationContext(new UmbValidationContext(this).provide());
|
||||
|
||||
new UmbVariantValuesValidationPathTranslator(this);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user