From ec508918d31f861179d4f33fb3cd7a0a6f78e2e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Lyngs=C3=B8?= Date: Thu, 23 Jan 2025 14:36:26 +0100 Subject: [PATCH] reject and clear messages --- .../context/server-model-validator.context.ts | 14 +++++++++++--- .../controllers/validation.controller.ts | 6 +++++- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/validation/context/server-model-validator.context.ts b/src/Umbraco.Web.UI.Client/src/packages/core/validation/context/server-model-validator.context.ts index fc726492af..f856d42a55 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/validation/context/server-model-validator.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/validation/context/server-model-validator.context.ts @@ -24,6 +24,7 @@ export class UmbServerModelValidatorContext { #validatePromise?: Promise; #validatePromiseResolve?: () => void; + #validatePromiseReject?: () => void; #context?: typeof UMB_VALIDATION_CONTEXT.TYPE; #isValid = true; @@ -50,9 +51,10 @@ export class UmbServerModelValidatorContext this.#context?.messages.removeMessagesByType('server'); this.#isValid = false; - //this.#validatePromiseReject?.(); - this.#validatePromise = new Promise((resolve) => { + this.#validatePromiseReject?.(); + this.#validatePromise = new Promise((resolve, reject) => { this.#validatePromiseResolve = resolve; + this.#validatePromiseReject = reject; }); // Store this state of the data for translator look ups: @@ -100,6 +102,7 @@ export class UmbServerModelValidatorContext this.#validatePromiseResolve?.(); this.#validatePromiseResolve = undefined; + this.#validatePromiseReject = undefined; } get isValid(): boolean { @@ -112,7 +115,12 @@ export class UmbServerModelValidatorContext return this.#isValid ? Promise.resolve() : Promise.reject(); } - reset(): void {} + reset(): void { + this.#isValid = true; + this.#validatePromiseReject?.(); + this.#validatePromiseResolve = undefined; + this.#validatePromiseReject = undefined; + } focusFirstInvalidElement(): void {} diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/validation/controllers/validation.controller.ts b/src/Umbraco.Web.UI.Client/src/packages/core/validation/controllers/validation.controller.ts index 8e7cbd3635..49715f1fe6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/validation/controllers/validation.controller.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/validation/controllers/validation.controller.ts @@ -192,6 +192,9 @@ export class UmbValidationController extends UmbControllerBase implements UmbVal */ addValidator(validator: UmbValidator): void { if (this.#validators.includes(validator)) return; + if (validator === this) { + throw new Error('Cannot add it self as validator'); + } this.#validators.push(validator); //validator.addEventListener('change', this.#onValidatorChange); if (this.#validationMode) { @@ -231,7 +234,7 @@ export class UmbValidationController extends UmbControllerBase implements UmbVal if (!this.messages) { // This Context has been destroyed while is was validating, so we should not continue. - return; + return Promise.reject(); } // If we have any messages then we are not valid, otherwise lets check the validation results: [NL] @@ -264,6 +267,7 @@ export class UmbValidationController extends UmbControllerBase implements UmbVal */ reset(): void { this.#validationMode = false; + this.messages.clear(); this.#validators.forEach((v) => v.reset()); }