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) { 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; + } } }