From aa269e317ba3bc1bcd57565f301329abb904c8d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Lyngs=C3=B8?= Date: Wed, 13 Aug 2025 08:16:17 +0200 Subject: [PATCH] Fix #19675 (#19891) * clean up old stuff in validation form control mixin * ensure validation trigger when value is changed * Update src/Umbraco.Web.UI.Client/src/packages/property-editors/content-picker/property-editor-ui-content-picker.element.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../core/validation/mixins/form-control.mixin.ts | 10 +--------- .../input-document/input-document.element.ts | 1 + .../components/input-media/input-media.element.ts | 1 + .../input-member/input-member.element.ts | 1 + .../input-content/input-content.element.ts | 1 + .../property-editor-ui-content-picker.element.ts | 14 +++----------- 6 files changed, 8 insertions(+), 20 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/validation/mixins/form-control.mixin.ts b/src/Umbraco.Web.UI.Client/src/packages/core/validation/mixins/form-control.mixin.ts index cb582efd92..51e925802a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/validation/mixins/form-control.mixin.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/validation/mixins/form-control.mixin.ts @@ -324,7 +324,6 @@ export function UmbFormControlMixin< */ protected _runValidators() { this.#validity = {}; - //const messages: Set = new Set(); let message: string | undefined = undefined; let innerFormControlEl: UmbNativeFormControlElement | undefined = undefined; @@ -332,7 +331,6 @@ export function UmbFormControlMixin< this.#validators.some((validator) => { if (validator.checkMethod()) { this.#validity[validator.flagKey] = true; - //messages.add(validator.getMessageMethod()); message = validator.getMessageMethod(); return true; } @@ -362,13 +360,7 @@ export function UmbFormControlMixin< this.#validity.valid = !hasError; // Transfer the new validityState to the ElementInternals. [NL] - this._internals.setValidity( - this.#validity, - // Turn messages into an array and join them with a comma. [NL]: - //[...messages].join(', '), - message, - innerFormControlEl ?? this.getFormElement() ?? undefined, - ); + this._internals.setValidity(this.#validity, message, innerFormControlEl ?? this.getFormElement() ?? undefined); this.#dispatchValidationState(); } diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/components/input-document/input-document.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/components/input-document/input-document.element.ts index 6ce338324c..3767445c56 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/components/input-document/input-document.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/components/input-document/input-document.element.ts @@ -95,6 +95,7 @@ export class UmbInputDocumentElement extends UmbFormControlMixin 0 ? this.selection.join(',') : undefined; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-media/input-media.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-media/input-media.element.ts index fee9010c99..dc2bfcbf1b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-media/input-media.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-media/input-media.element.ts @@ -119,6 +119,7 @@ export class UmbInputMediaElement extends UmbFormControlMixin 0 ? this.selection.join(',') : undefined; diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member/components/input-member/input-member.element.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member/components/input-member/input-member.element.ts index 0d903b5dee..d5b60d9e04 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member/components/input-member/input-member.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member/components/input-member/input-member.element.ts @@ -88,6 +88,7 @@ export class UmbInputMemberElement extends UmbFormControlMixin 0 ? this.selection.join(',') : undefined; diff --git a/src/Umbraco.Web.UI.Client/src/packages/property-editors/content-picker/components/input-content/input-content.element.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/content-picker/components/input-content/input-content.element.ts index ac0825cc7a..91e8f177d5 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/property-editors/content-picker/components/input-content/input-content.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/property-editors/content-picker/components/input-content/input-content.element.ts @@ -59,6 +59,7 @@ export class UmbInputContentElement extends UmbFormControlMixin 0 ? this.#selection.join(',') : undefined; diff --git a/src/Umbraco.Web.UI.Client/src/packages/property-editors/content-picker/property-editor-ui-content-picker.element.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/content-picker/property-editor-ui-content-picker.element.ts index 9244c8c816..f34caa2ca1 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/property-editors/content-picker/property-editor-ui-content-picker.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/property-editors/content-picker/property-editor-ui-content-picker.element.ts @@ -29,15 +29,6 @@ export class UmbPropertyEditorUIContentPickerElement extends UmbFormControlMixin(UmbLitElement, undefined) implements UmbPropertyEditorUiElement { - @property({ type: Array }) - public override set value(value: UmbContentPickerValueType | undefined) { - this.#value = value; - } - public override get value(): UmbContentPickerValueType | undefined { - return this.#value; - } - #value?: UmbContentPickerValueType = []; - /** * Sets the input to readonly mode, meaning value cannot be changed but still able to read and select its content. * @type {boolean} @@ -94,7 +85,7 @@ export class UmbPropertyEditorUIContentPickerElement this.#dynamicRoot = startNode.dynamicRoot; // NOTE: Filter out any items that do not match the entity type. [LK] - this._invalidData = this.#value?.filter((x) => x.type !== this._rootEntityType); + this._invalidData = this.value?.filter((x) => x.type !== this._rootEntityType); if (this._invalidData?.length) { this.readonly = true; } @@ -119,7 +110,8 @@ export class UmbPropertyEditorUIContentPickerElement return !isNaN(num) && num > 0 ? num : fallback; } - override firstUpdated() { + override firstUpdated(changedProperties: Map) { + super.firstUpdated(changedProperties); this.addFormControlElement(this.shadowRoot!.querySelector('umb-input-content')!); this.#setPickerRootUnique();