diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-list/components/block-list-entry/block-list-entry.element.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-list/components/block-list-entry/block-list-entry.element.ts index d0c0dccfc6..ef2dd27628 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block-list/components/block-list-entry/block-list-entry.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-list/components/block-list-entry/block-list-entry.element.ts @@ -11,7 +11,7 @@ import { stringOrStringArrayContains } from '@umbraco-cms/backoffice/utils'; import { UmbBlockListEntryContext } from '../../context/block-list-entry.context.js'; import { UMB_BLOCK_LIST, type UmbBlockListLayoutModel } from '../../types.js'; import { UmbObserveValidationStateController } from '@umbraco-cms/backoffice/validation'; -import { UmbDataPathBlockElementDataFilter } from '@umbraco-cms/backoffice/block'; +import { UmbDataPathBlockElementDataQuery } from '@umbraco-cms/backoffice/block'; /** * @element umb-block-list-entry @@ -38,7 +38,7 @@ export class UmbBlockListEntryElement extends UmbLitElement implements UmbProper new UmbObserveValidationStateController( this, - `$.contentData[${UmbDataPathBlockElementDataFilter({ udi: value })}]`, + `$.contentData[${UmbDataPathBlockElementDataQuery({ udi: value })}]`, (hasMessages) => { this._contentInvalid = hasMessages; this._blockViewProps.contentInvalid = hasMessages; @@ -167,7 +167,7 @@ export class UmbBlockListEntryElement extends UmbLitElement implements UmbProper // Observe settings validation state: new UmbObserveValidationStateController( this, - `$.settingsData[${UmbDataPathBlockElementDataFilter(settings)}]`, + `$.settingsData[${UmbDataPathBlockElementDataQuery(settings)}]`, (hasMessages) => { this._settingsInvalid = hasMessages; this._blockViewProps.settingsInvalid = hasMessages; diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block/validation/block-data-property-validation-path-translator.controller.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block/validation/block-data-property-validation-path-translator.controller.ts index 868ed7f339..096eec3967 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block/validation/block-data-property-validation-path-translator.controller.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block/validation/block-data-property-validation-path-translator.controller.ts @@ -1,7 +1,7 @@ import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { GetPropertyNameFromPath, - UmbDataPathPropertyValueFilter, + UmbDataPathPropertyValueQuery, UmbValidationPathTranslatorBase, } from '@umbraco-cms/backoffice/validation'; @@ -23,6 +23,6 @@ export class UmbBlockElementDataValidationPathTranslator extends UmbValidationPa const specificValue = { alias: key }; // replace the values[ number ] with JSON-Path filter values[@.(...)], continues by the rest of the path: //return '$.values' + UmbVariantValuesValidationPathTranslator(specificValue) + path.substring(path.indexOf(']')); - return '$.values[' + UmbDataPathPropertyValueFilter(specificValue) + '.value'; + return '$.values[' + UmbDataPathPropertyValueQuery(specificValue) + '.value'; } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block/validation/block-data-validation-path-translator.controller.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block/validation/block-data-validation-path-translator.controller.ts index 7bb1e4e8fb..4ba0cf60f0 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block/validation/block-data-validation-path-translator.controller.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block/validation/block-data-validation-path-translator.controller.ts @@ -1,46 +1,23 @@ -import { UmbDataPathBlockElementDataFilter } from './data-path-element-data-filter.function.js'; +import { UmbDataPathBlockElementDataQuery } from './data-path-element-data-query.function.js'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; -import { UmbValidationPathTranslatorBase } from '@umbraco-cms/backoffice/validation'; +import { UmbAbstractArrayValidationPathTranslator } from '@umbraco-cms/backoffice/validation'; -export class UmbBlockElementDataValidationPathTranslator extends UmbValidationPathTranslatorBase { +export class UmbBlockElementDataValidationPathTranslator extends UmbAbstractArrayValidationPathTranslator { #propertyName: string; - #pathStart: string; constructor(host: UmbControllerHost, propertyName: 'contentData' | 'settingsData') { - super(host); + super(host, '$.' + propertyName + '[', UmbDataPathBlockElementDataQuery); this.#propertyName = propertyName; - this.#pathStart = '$.' + propertyName + '['; } - translate(path: string) { + getDataFromIndex(index: number) { if (!this._context) return; - if (path.indexOf(this.#pathStart) !== 0) { - // We do not handle this path. - return false; - } - const startLength = this.#pathStart.length; - const pathEnd = path.indexOf(']', startLength); - if (pathEnd === -1) { - // We do not handle this path. - return false; - } - // retrieve the number from the message values index: [NL] - const index = parseInt(path.substring(startLength, pathEnd)); - - if (isNaN(index)) { - // index is not a number, this means its not a path we want to translate. [NL] - return false; - } - - // Get the data from the validation request, the context holds that for us: [NL] const data = this._context.getTranslationData(); - - const specificValue = data[this.#propertyName][index]; - if (!specificValue || !specificValue.udi) { + const entry = data[this.#propertyName][index]; + if (!entry || !entry.udi) { console.log('block did not have UDI', this.#propertyName, index, data); return false; } - // replace the values[ number ] with JSON-Path filter values[@.(...)], continues by the rest of the path: - return this.#pathStart + UmbDataPathBlockElementDataFilter(specificValue) + path.substring(path.indexOf(']')); + return entry; } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block/validation/data-path-element-data-filter.function.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block/validation/data-path-element-data-query.function.ts similarity index 76% rename from src/Umbraco.Web.UI.Client/src/packages/block/block/validation/data-path-element-data-filter.function.ts rename to src/Umbraco.Web.UI.Client/src/packages/block/block/validation/data-path-element-data-query.function.ts index 51c71b394e..c65d92fb82 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block/validation/data-path-element-data-filter.function.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block/validation/data-path-element-data-query.function.ts @@ -1,13 +1,13 @@ import type { UmbBlockDataType } from '../types.js'; /** - * Validation Data Path filter for Block Element Data. + * Validation Data Path Query generator for Block Element Data. * write a JSON-Path filter similar to `?(@.udi = 'my-udi://1234')` * @param udi {string} - The udi of the block Element data. * @param data {{udi: string}} - A data object with the udi property. * @returns */ -export function UmbDataPathBlockElementDataFilter(data: Pick): string { +export function UmbDataPathBlockElementDataQuery(data: Pick): string { // write a array of strings for each property, where alias must be present and culture and segment are optional //const filters: Array = [`@.udi = '${udi}'`]; //return `?(${filters.join(' && ')})`; diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block/validation/index.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block/validation/index.ts index 34a563d9d5..331352a0d8 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block/validation/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block/validation/index.ts @@ -1,2 +1,2 @@ export * from './block-data-validation-path-translator.controller.js'; -export * from './data-path-element-data-filter.function.js'; +export * from './data-path-element-data-query.function.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/content-editor-properties.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/content-editor-properties.element.ts index a52eaf06d1..1399820201 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/content-editor-properties.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/content-editor-properties.element.ts @@ -7,7 +7,7 @@ import type { } from '@umbraco-cms/backoffice/content-type'; import { UmbContentTypePropertyStructureHelper } from '@umbraco-cms/backoffice/content-type'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; -import { UmbDataPathPropertyValueFilter } from '@umbraco-cms/backoffice/validation'; +import { UmbDataPathPropertyValueQuery } from '@umbraco-cms/backoffice/validation'; import { UMB_PROPERTY_STRUCTURE_WORKSPACE_CONTEXT } from '@umbraco-cms/backoffice/workspace'; import type { UmbVariantId } from '@umbraco-cms/backoffice/variant'; import { UMB_PROPERTY_DATASET_CONTEXT } from '@umbraco-cms/backoffice/property'; @@ -58,7 +58,7 @@ export class UmbContentWorkspaceViewEditPropertiesElement extends UmbLitElement if (!this.#variantId || !this._propertyStructure) return; this._dataPaths = this._propertyStructure.map( (property) => - `$.values[${UmbDataPathPropertyValueFilter({ + `$.values[${UmbDataPathPropertyValueQuery({ alias: property.alias, culture: property.variesByCulture ? this.#variantId!.culture : null, segment: property.variesBySegment ? this.#variantId!.segment : null, diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/validation/controllers/server-model-validator.context.ts b/src/Umbraco.Web.UI.Client/src/packages/core/validation/controllers/server-model-validator.context.ts index d3793a2311..bee1c2369c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/validation/controllers/server-model-validator.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/validation/controllers/server-model-validator.context.ts @@ -1,5 +1,5 @@ import type { UmbValidator } from '../interfaces/validator.interface.js'; -import { UmbDataPathPropertyValueFilter } from '../utils/index.js'; +import { UmbDataPathPropertyValueQuery } from '../utils/index.js'; import { UMB_VALIDATION_CONTEXT } from '../context/validation.context-token.js'; import { UMB_VALIDATION_EMPTY_LOCALIZATION_KEY } from '../const.js'; import { UMB_SERVER_MODEL_VALIDATOR_CONTEXT } from './server-model-validator.context-token.js'; @@ -87,7 +87,7 @@ export class UmbServerModelValidatorContext const uniqueMissingProperties = [...new Set(errorBody.missingProperties)]; uniqueMissingProperties.forEach((alias) => { this.#data.variants.forEach((variant: any) => { - const path = `$.values[${UmbDataPathPropertyValueFilter({ + const path = `$.values[${UmbDataPathPropertyValueQuery({ alias: alias, culture: variant.culture, segment: variant.segment, diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/validation/translators/abstract-array-path-translator.controller.ts b/src/Umbraco.Web.UI.Client/src/packages/core/validation/translators/abstract-array-path-translator.controller.ts index 61e07f23bf..121310af55 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/validation/translators/abstract-array-path-translator.controller.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/validation/translators/abstract-array-path-translator.controller.ts @@ -1,14 +1,15 @@ -import { UmbDataPathVariantFilter } from '../utils/index.js'; import { UmbValidationPathTranslatorBase } from './validation-path-translator-base.controller.js'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; export abstract class UmbAbstractArrayValidationPathTranslator extends UmbValidationPathTranslatorBase { #initialPathToMatch: string; + #queryMethod: (data: unknown) => string; - constructor(host: UmbControllerHost, initialPathToMatch: string) { + constructor(host: UmbControllerHost, initialPathToMatch: string, queryMethod: (data: any) => string) { super(host); this.#initialPathToMatch = initialPathToMatch; + this.#queryMethod = queryMethod; } translate(path: string) { if (!this._context) return; @@ -34,7 +35,7 @@ export abstract class UmbAbstractArrayValidationPathTranslator extends UmbValida if (!data) return false; // replace the values[ number ] with JSON-Path filter values[@.(...)], continues by the rest of the path: - return this.#initialPathToMatch + UmbDataPathVariantFilter(data as any) + path.substring(path.indexOf(']')); + return this.#initialPathToMatch + this.#queryMethod(data) + path.substring(path.indexOf(']')); } abstract getDataFromIndex(index: number): unknown | undefined; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/validation/translators/variant-values-validation-path-translator.controller.ts b/src/Umbraco.Web.UI.Client/src/packages/core/validation/translators/variant-values-validation-path-translator.controller.ts index 171b0388e1..f3e1020607 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/validation/translators/variant-values-validation-path-translator.controller.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/validation/translators/variant-values-validation-path-translator.controller.ts @@ -1,9 +1,10 @@ +import { UmbDataPathPropertyValueQuery } from '../utils/data-path-property-value-query.function.js'; import { UmbAbstractArrayValidationPathTranslator } from './abstract-array-path-translator.controller.js'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; export class UmbVariantValuesValidationPathTranslator extends UmbAbstractArrayValidationPathTranslator { constructor(host: UmbControllerHost) { - super(host, '$.values['); + super(host, '$.values[', UmbDataPathPropertyValueQuery); } getDataFromIndex(index: number) { diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/validation/translators/variants-validation-path-translator.controller.ts b/src/Umbraco.Web.UI.Client/src/packages/core/validation/translators/variants-validation-path-translator.controller.ts index c0e453d68c..545e2a5488 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/validation/translators/variants-validation-path-translator.controller.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/validation/translators/variants-validation-path-translator.controller.ts @@ -1,9 +1,10 @@ +import { UmbDataPathVariantQuery } from '../utils/data-path-variant-query.function.js'; import { UmbAbstractArrayValidationPathTranslator } from './abstract-array-path-translator.controller.js'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; -export class UmbVariantValuesValidationPathTranslator extends UmbAbstractArrayValidationPathTranslator { +export class UmbVariantsValidationPathTranslator extends UmbAbstractArrayValidationPathTranslator { constructor(host: UmbControllerHost) { - super(host, '$.variants['); + super(host, '$.variants[', UmbDataPathVariantQuery); } getDataFromIndex(index: number) { diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/validation/utils/data-path-property-value-filter.function.ts b/src/Umbraco.Web.UI.Client/src/packages/core/validation/utils/data-path-property-value-query.function.ts similarity index 89% rename from src/Umbraco.Web.UI.Client/src/packages/core/validation/utils/data-path-property-value-filter.function.ts rename to src/Umbraco.Web.UI.Client/src/packages/core/validation/utils/data-path-property-value-query.function.ts index d67cb968a9..d184f6e205 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/validation/utils/data-path-property-value-filter.function.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/validation/utils/data-path-property-value-query.function.ts @@ -2,13 +2,13 @@ import type { UmbPartialSome } from '@umbraco-cms/backoffice/utils'; import type { UmbVariantPropertyValueModel } from '@umbraco-cms/backoffice/variant'; /** - * Validation Data Path filter for Property Value. + * Validation Data Path Query generator for Property Value. * write a JSON-Path filter similar to `?(@.alias = 'myAlias' && @.culture == 'en-us' && @.segment == 'mySegment')` * where culture and segment are optional * @param value * @returns */ -export function UmbDataPathPropertyValueFilter( +export function UmbDataPathPropertyValueQuery( value: UmbPartialSome, 'culture' | 'segment'>, ): string { // write a array of strings for each property, where alias must be present and culture and segment are optional diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/validation/utils/data-path-variant-filter.function.ts b/src/Umbraco.Web.UI.Client/src/packages/core/validation/utils/data-path-variant-query.function.ts similarity index 89% rename from src/Umbraco.Web.UI.Client/src/packages/core/validation/utils/data-path-variant-filter.function.ts rename to src/Umbraco.Web.UI.Client/src/packages/core/validation/utils/data-path-variant-query.function.ts index 64d14a9e21..25666269cd 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/validation/utils/data-path-variant-filter.function.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/validation/utils/data-path-variant-query.function.ts @@ -2,13 +2,13 @@ import type { UmbPartialSome } from '@umbraco-cms/backoffice/utils'; import type { UmbVariantPropertyValueModel } from '@umbraco-cms/backoffice/variant'; /** - * Validation Data Path filter for Variant. + * Validation Data Path query generator for Variant. * write a JSON-Path filter similar to `?(@.culture == 'en-us' && @.segment == 'mySegment')` * where segment are optional. * @param value * @returns */ -export function UmbDataPathVariantFilter( +export function UmbDataPathVariantQuery( value: UmbPartialSome, 'segment'>, ): string { // write a array of strings for each property, where culture must be present and segment is optional diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/validation/utils/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/validation/utils/index.ts index 5459d4a3e9..52e7d2c3c4 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/validation/utils/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/validation/utils/index.ts @@ -1,3 +1,3 @@ -export * from './data-path-property-value-filter.function.js'; -export * from './data-path-variant-filter.function.js'; +export * from './data-path-property-value-query.function.js'; +export * from './data-path-variant-query.function.js'; export * from './json-path.function.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-split-view/workspace-split-view-variant-selector.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-split-view/workspace-split-view-variant-selector.element.ts index e6c0d58469..7a9bce0fc7 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-split-view/workspace-split-view-variant-selector.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-split-view/workspace-split-view-variant-selector.element.ts @@ -12,7 +12,7 @@ import { UmbVariantId } from '@umbraco-cms/backoffice/variant'; import { UMB_PROPERTY_DATASET_CONTEXT, isNameablePropertyDatasetContext } from '@umbraco-cms/backoffice/property'; import { UmbLitElement, umbFocus } from '@umbraco-cms/backoffice/lit-element'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -import { UmbDataPathVariantFilter, umbBindToValidation } from '@umbraco-cms/backoffice/validation'; +import { UmbDataPathVariantQuery, umbBindToValidation } from '@umbraco-cms/backoffice/validation'; type UmbDocumentVariantOption = { culture: string | null; @@ -221,7 +221,7 @@ export class UmbWorkspaceSplitViewVariantSelectorElement extends UmbLitElement { .value=${this._name ?? ''} @input=${this.#handleInput} required - ${umbBindToValidation(this, `$.variants[${UmbDataPathVariantFilter(this._variantId)}].name`, this._name ?? '')} + ${umbBindToValidation(this, `$.variants[${UmbDataPathVariantQuery(this._variantId)}].name`, this._name ?? '')} ${umbFocus()} > ${ diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/components/property-editor-config/property-editor-config.element.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/components/property-editor-config/property-editor-config.element.ts index 0466721c24..2fb4bb1ffc 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/components/property-editor-config/property-editor-config.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/components/property-editor-config/property-editor-config.element.ts @@ -3,7 +3,7 @@ import { html, customElement, state, ifDefined, repeat } from '@umbraco-cms/back import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import type { PropertyEditorSettingsProperty } from '@umbraco-cms/backoffice/extension-registry'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; -import { UmbDataPathPropertyValueFilter } from '@umbraco-cms/backoffice/validation'; +import { UmbDataPathPropertyValueQuery } from '@umbraco-cms/backoffice/validation'; /** * @element umb-property-editor-config @@ -46,7 +46,7 @@ export class UmbPropertyEditorConfigElement extends UmbLitElement { (property) => property.alias, (property) => html`