diff --git a/src/Umbraco.Web.UI.Client/schemas/api/api.yml b/src/Umbraco.Web.UI.Client/schemas/api/api.yml index a1d30f5e82..7baab5d998 100644 --- a/src/Umbraco.Web.UI.Client/schemas/api/api.yml +++ b/src/Umbraco.Web.UI.Client/schemas/api/api.yml @@ -631,6 +631,16 @@ components: - label - alias - propertyEditorUI + PropertyEditorConfigDefaultData: + type: object + properties: + alias: + type: string + value: + type: object + required: + - alias + - value PropertyEditorConfig: type: object properties: @@ -639,7 +649,9 @@ components: items: $ref: '#/components/schemas/PropertyEditorConfigProperty' defaultData: - type: object + type: array + items: + $ref: '#/components/schemas/PropertyEditorConfigDefaultData' required: - properties MetaPropertyEditorUI: @@ -996,7 +1008,9 @@ components: items: $ref: '#/components/schemas/PropertyEditorConfigProperty' defaultData: - type: object + type: array + items: + $ref: '#/components/schemas/PropertyEditorConfigDefaultData' required: - properties ServerStatus: diff --git a/src/Umbraco.Web.UI.Client/schemas/generated-schema.ts b/src/Umbraco.Web.UI.Client/schemas/generated-schema.ts index a1de5e9632..dc851d486a 100644 --- a/src/Umbraco.Web.UI.Client/schemas/generated-schema.ts +++ b/src/Umbraco.Web.UI.Client/schemas/generated-schema.ts @@ -188,9 +188,13 @@ export interface components { alias: string; propertyEditorUI: string; }; + PropertyEditorConfigDefaultData: { + alias: string; + value: { [key: string]: unknown }; + }; PropertyEditorConfig: { properties: components["schemas"]["PropertyEditorConfigProperty"][]; - defaultData?: { [key: string]: unknown }; + defaultData?: components["schemas"]["PropertyEditorConfigDefaultData"][]; }; MetaPropertyEditorUI: { label: string; @@ -329,7 +333,7 @@ export interface components { }; PropertyEditorConfigResponse: { properties: components["schemas"]["PropertyEditorConfigProperty"][]; - defaultData?: { [key: string]: unknown }; + defaultData?: components["schemas"]["PropertyEditorConfigDefaultData"][]; }; /** @enum {string} */ ServerStatus: "running" | "must-install" | "must-upgrade"; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/property-editors/shared/property-editor-config/property-editor-config.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/property-editors/shared/property-editor-config/property-editor-config.element.ts index 7e3b57baa3..13e1931140 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/property-editors/shared/property-editor-config/property-editor-config.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/property-editors/shared/property-editor-config/property-editor-config.element.ts @@ -7,7 +7,7 @@ import { UmbContextConsumerMixin } from '../../../../core/context'; import { UmbExtensionRegistry } from '../../../../core/extension'; import { UmbPropertyEditorConfigStore } from '../../../../core/stores/property-editor-config/property-editor-config.store'; -import type { PropertyEditorConfigProperty } from '../../../../core/models'; +import type { PropertyEditorConfigDefaultData, PropertyEditorConfigProperty } from '../../../../core/models'; import '../../../components/entity-property/entity-property.element'; @@ -40,13 +40,15 @@ export class UmbPropertyEditorConfigElement extends UmbContextConsumerMixin(LitE } @property({ type: Array }) - public data: Array = []; + public data: Array<{ alias: string; value: unknown }> = []; @state() private _properties: Array = []; - private _propertyEditorConfigDefaultData?: any; - private _propertyEditorUIConfigDefaultData?: any; + private _propertyEditorConfigDefaultData: Array = []; + private _propertyEditorUIConfigDefaultData: Array = []; + + private _configDefaultData?: Array; private _propertyEditorConfigProperties: Array = []; private _propertyEditorUIConfigProperties: Array = []; @@ -81,8 +83,9 @@ export class UmbPropertyEditorConfigElement extends UmbContextConsumerMixin(LitE .subscribe((propertyEditorConfig) => { if (!propertyEditorConfig) return; this._propertyEditorConfigProperties = propertyEditorConfig?.config?.properties || []; - this._propertyEditorConfigDefaultData = propertyEditorConfig?.config?.defaultData || {}; - this._applyProperties(); + this._mergeProperties(); + this._propertyEditorConfigDefaultData = propertyEditorConfig?.config?.defaultData || []; + this._mergeDefaultData(); }); } @@ -94,21 +97,24 @@ export class UmbPropertyEditorConfigElement extends UmbContextConsumerMixin(LitE this._extensionRegistry?.getByAlias(this.propertyEditorUIAlias).subscribe((manifest) => { if (manifest?.type === 'propertyEditorUI') { this._propertyEditorUIConfigProperties = manifest?.meta.config?.properties || []; - this._propertyEditorUIConfigDefaultData = manifest?.meta.config?.defaultData || {}; - this._applyProperties(); + this._mergeProperties(); + this._propertyEditorUIConfigDefaultData = manifest?.meta.config?.defaultData || []; + this._mergeDefaultData(); } }); } - private _applyProperties() { + private _mergeProperties() { this._properties = [...this._propertyEditorConfigProperties, ...this._propertyEditorUIConfigProperties]; } + private _mergeDefaultData() { + this._configDefaultData = [...this._propertyEditorConfigDefaultData, ...this._propertyEditorUIConfigDefaultData]; + } + private _getValue(property: PropertyEditorConfigProperty) { const value = this.data.find((data) => data.alias === property.alias)?.value; - const defaultValue = - this._propertyEditorConfigDefaultData?.[property.alias] || - this._propertyEditorUIConfigDefaultData?.[property.alias]; + const defaultValue = this._configDefaultData?.find((data) => data.alias === property.alias)?.value; return value || defaultValue || null; } diff --git a/src/Umbraco.Web.UI.Client/src/core/models/index.ts b/src/Umbraco.Web.UI.Client/src/core/models/index.ts index 2da1cc6ad7..0c64b04e82 100644 --- a/src/Umbraco.Web.UI.Client/src/core/models/index.ts +++ b/src/Umbraco.Web.UI.Client/src/core/models/index.ts @@ -38,6 +38,7 @@ export type PropertyEditorConfigResponse = components['schemas']['PropertyEditor export type PropertyEditorConfig = components['schemas']['PropertyEditorConfig']; export type PropertyEditor = components['schemas']['PropertyEditor']; export type PropertyEditorConfigProperty = components['schemas']['PropertyEditorConfigProperty']; +export type PropertyEditorConfigDefaultData = components['schemas']['PropertyEditorConfigDefaultData']; export type ManifestElementType = | ManifestSection diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/property-editor.data.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/property-editor.data.ts index ded001b6f9..180980c83b 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/data/property-editor.data.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/property-editor.data.ts @@ -157,9 +157,12 @@ export const data: Array = [ propertyEditorUI: 'Umb.PropertyEditorUI.Textarea', }, ], - defaultData: { - maxChars: 512, - }, + defaultData: [ + { + alias: 'maxChars', + value: '512', + }, + ], }, }, { diff --git a/src/Umbraco.Web.UI.Client/src/temp-internal-manifests.ts b/src/Umbraco.Web.UI.Client/src/temp-internal-manifests.ts index 8553e0b89a..252ba481a9 100644 --- a/src/Umbraco.Web.UI.Client/src/temp-internal-manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/temp-internal-manifests.ts @@ -195,9 +195,12 @@ export const internalManifests: Array Promise