From a4b410719034a59ab6456662253e115ca9aaa14a Mon Sep 17 00:00:00 2001 From: Vitor Rodrigues Date: Fri, 1 Dec 2023 13:43:39 +0100 Subject: [PATCH] Expose the Delivery API CLR type (#15150) * Expose the Delivery API CLR type * Updated field naming and warnings Addresses PR feedback * Added default implementation to prevent breaking change (cherry picked from commit 7f4378066d436facf048307ddc69b0668e30a986) --- .../IPublishedPropertyType.cs | 8 +++++ .../PublishedContent/PublishedPropertyType.cs | 29 +++++++++++++------ 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/src/Umbraco.Core/Models/PublishedContent/IPublishedPropertyType.cs b/src/Umbraco.Core/Models/PublishedContent/IPublishedPropertyType.cs index 4cf5bdd6af..9bced05ff5 100644 --- a/src/Umbraco.Core/Models/PublishedContent/IPublishedPropertyType.cs +++ b/src/Umbraco.Core/Models/PublishedContent/IPublishedPropertyType.cs @@ -71,6 +71,14 @@ public interface IPublishedPropertyType /// Type ModelClrType { get; } + /// + /// Gets the property model Delivery Api CLR type. + /// + /// + /// The model CLR type may be a type, or may contain types. + /// + Type DeliveryApiModelClrType => ModelClrType; + /// /// Gets the property CLR type. /// diff --git a/src/Umbraco.Core/Models/PublishedContent/PublishedPropertyType.cs b/src/Umbraco.Core/Models/PublishedContent/PublishedPropertyType.cs index 52e3371767..ed2d19cd6f 100644 --- a/src/Umbraco.Core/Models/PublishedContent/PublishedPropertyType.cs +++ b/src/Umbraco.Core/Models/PublishedContent/PublishedPropertyType.cs @@ -24,6 +24,7 @@ namespace Umbraco.Cms.Core.Models.PublishedContent private PropertyCacheLevel _deliveryApiCacheLevelForExpansion; private Type? _modelClrType; + private Type? _deliveryApiModelClrType; private Type? _clrType; #region Constructors @@ -192,17 +193,13 @@ namespace Umbraco.Cms.Core.Models.PublishedContent } } + var deliveryApiPropertyValueConverter = _converter as IDeliveryApiPropertyValueConverter; + _cacheLevel = _converter?.GetPropertyCacheLevel(this) ?? PropertyCacheLevel.Snapshot; - if (_converter is IDeliveryApiPropertyValueConverter deliveryApiPropertyValueConverter) - { - _deliveryApiCacheLevel = deliveryApiPropertyValueConverter.GetDeliveryApiPropertyCacheLevel(this); - _deliveryApiCacheLevelForExpansion = deliveryApiPropertyValueConverter.GetDeliveryApiPropertyCacheLevelForExpansion(this); - } - else - { - _deliveryApiCacheLevel = _deliveryApiCacheLevelForExpansion = _cacheLevel; - } + _deliveryApiCacheLevel = deliveryApiPropertyValueConverter?.GetDeliveryApiPropertyCacheLevel(this) ?? _cacheLevel; + _deliveryApiCacheLevelForExpansion = deliveryApiPropertyValueConverter?.GetDeliveryApiPropertyCacheLevelForExpansion(this) ?? _cacheLevel; _modelClrType = _converter?.GetPropertyValueType(this) ?? typeof(object); + _deliveryApiModelClrType = deliveryApiPropertyValueConverter?.GetDeliveryApiPropertyValueType(this) ?? _modelClrType; } /// @@ -352,6 +349,20 @@ namespace Umbraco.Cms.Core.Models.PublishedContent } } + /// + public Type DeliveryApiModelClrType + { + get + { + if (!_initialized) + { + Initialize(); + } + + return _deliveryApiModelClrType!; + } + } + /// public Type? ClrType {