From e2746604a16e9c0b08a1756ca6be1673ef8a9ccf Mon Sep 17 00:00:00 2001 From: Kenn Jacobsen Date: Sun, 19 May 2019 08:37:33 +0200 Subject: [PATCH 1/2] If MNTP is configured to pick max 1 item, convert the value into IPublishedContent instead of IEnumerable --- .../MultiNodeTreePickerValueConverter.cs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/Umbraco.Web/PropertyEditors/ValueConverters/MultiNodeTreePickerValueConverter.cs b/src/Umbraco.Web/PropertyEditors/ValueConverters/MultiNodeTreePickerValueConverter.cs index a210aa62c6..4bb33fd2da 100644 --- a/src/Umbraco.Web/PropertyEditors/ValueConverters/MultiNodeTreePickerValueConverter.cs +++ b/src/Umbraco.Web/PropertyEditors/ValueConverters/MultiNodeTreePickerValueConverter.cs @@ -43,7 +43,9 @@ namespace Umbraco.Web.PropertyEditors.ValueConverters => PropertyCacheLevel.Snapshot; public override Type GetPropertyValueType(PublishedPropertyType propertyType) - => typeof (IEnumerable); + => IsSingleNodePicker(propertyType) + ? typeof(IPublishedContent) + : typeof(IEnumerable); public override object ConvertSourceToIntermediate(IPublishedElement owner, PublishedPropertyType propertyType, object source, bool preview) { @@ -73,6 +75,7 @@ namespace Umbraco.Web.PropertyEditors.ValueConverters if (propertyType.EditorAlias.Equals(Constants.PropertyEditors.Aliases.MultiNodeTreePicker)) { var udis = (Udi[])source; + var isSingleNodePicker = IsSingleNodePicker(propertyType); if ((propertyType.Alias != null && PropertiesToExclude.InvariantContains(propertyType.Alias)) == false) { @@ -102,9 +105,17 @@ namespace Umbraco.Web.PropertyEditors.ValueConverters if (multiNodeTreePickerItem != null && multiNodeTreePickerItem.ItemType != PublishedItemType.Element) { multiNodeTreePicker.Add(multiNodeTreePickerItem); + if (isSingleNodePicker) + { + break; + } } } + if (isSingleNodePicker) + { + return multiNodeTreePicker.FirstOrDefault(); + } return multiNodeTreePicker; } @@ -141,5 +152,10 @@ namespace Umbraco.Web.PropertyEditors.ValueConverters } return content; } + + private static bool IsSingleNodePicker(PublishedPropertyType propertyType) + { + return propertyType.DataType.ConfigurationAs().MaxNumber == 1; + } } } From f07fcac13dd91e34a32dc99430eb5b33db68c6e4 Mon Sep 17 00:00:00 2001 From: Kenn Jacobsen Date: Sun, 19 May 2019 08:38:03 +0200 Subject: [PATCH 2/2] If MNTP is configured to pick max 1 item, don't allow multiselect in the content picker dialog --- .../contentpicker/contentpicker.controller.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/contentpicker/contentpicker.controller.js b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/contentpicker/contentpicker.controller.js index 33cf24962f..4d695c97b5 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/contentpicker/contentpicker.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/contentpicker/contentpicker.controller.js @@ -157,6 +157,11 @@ function contentPickerController($scope, entityResource, editorState, iconHelper // pre-value config on to the dialog options angular.extend(dialogOptions, $scope.model.config); + // if we can't pick more than one item, explicitly disable multiPicker in the dialog options + if ($scope.model.config.maxNumber && parseInt($scope.model.config.maxNumber) === 1) { + dialogOptions.multiPicker = false; + } + // add the current filter (if any) as title for the filtered out nodes if ($scope.model.config.filter) { localizationService.localize("contentPicker_allowedItemTypes", [$scope.model.config.filter]).then(function (data) {