Skip to content

Commit 6e04cc7

Browse files
contentpicker: Don't validate minNumber if empty and not mandatory (#11330)
* contentpicker: Don't validate minNumber if empty and not mandatory * adds variable for accessing $scope.model.config.minNumber and $scope.model.config.maxNumber Co-authored-by: Nathan Woulfe <[email protected]>
1 parent 5f97fca commit 6e04cc7

File tree

2 files changed

+26
-21
lines changed

2 files changed

+26
-21
lines changed

src/Umbraco.Web.UI.Client/src/views/propertyeditors/contentpicker/contentpicker.controller.js

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,14 +44,15 @@ function contentPickerController($scope, $q, $routeParams, $location, entityReso
4444
function validate() {
4545
if ($scope.contentPickerForm) {
4646
//Validate!
47-
if ($scope.model.config && $scope.model.config.minNumber && parseInt($scope.model.config.minNumber) > $scope.renderModel.length) {
47+
var hasItemsOrMandatory = $scope.renderModel.length !== 0 || ($scope.model.validation && $scope.model.validation.mandatory);
48+
if (hasItemsOrMandatory && $scope.minNumberOfItems > $scope.renderModel.length) {
4849
$scope.contentPickerForm.minCount.$setValidity("minCount", false);
4950
}
5051
else {
5152
$scope.contentPickerForm.minCount.$setValidity("minCount", true);
5253
}
5354

54-
if ($scope.model.config && $scope.model.config.maxNumber && parseInt($scope.model.config.maxNumber) < $scope.renderModel.length) {
55+
if ($scope.maxNumberOfItems < $scope.renderModel.length) {
5556
$scope.contentPickerForm.maxCount.$setValidity("maxCount", false);
5657
}
5758
else {
@@ -145,6 +146,10 @@ function contentPickerController($scope, $q, $routeParams, $location, entityReso
145146

146147
$scope.umbProperty.setPropertyActions(propertyActions);
147148
}
149+
150+
// use these to avoid the nested property lookups/null-checks
151+
$scope.minNumberOfItems = $scope.model.config.minNumber ? parseInt($scope.model.config.minNumber) : 0;
152+
$scope.maxNumberOfItems = $scope.model.config.maxNumber ? parseInt($scope.model.config.maxNumber) : 0;
148153
}
149154

150155
//Umbraco persists boolean for prevalues as "0" or "1" so we need to convert that!
@@ -194,7 +199,7 @@ function contentPickerController($scope, $q, $routeParams, $location, entityReso
194199
dialogOptions.dataTypeKey = $scope.model.dataTypeKey;
195200

196201
// if we can't pick more than one item, explicitly disable multiPicker in the dialog options
197-
if ($scope.model.config.maxNumber && parseInt($scope.model.config.maxNumber) === 1) {
202+
if ($scope.maxNumberOfItems === 1) {
198203
dialogOptions.multiPicker = false;
199204
}
200205

src/Umbraco.Web.UI.Client/src/views/propertyeditors/contentpicker/contentpicker.html

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
</umb-node-preview>
2020
</div>
2121

22-
<button ng-show="model.config.multiPicker === true && renderModel.length < model.config.maxNumber || renderModel.length === 0 || !model.config.maxNumber"
22+
<button ng-show="model.config.multiPicker === true && renderModel.length < maxNumberOfItems || renderModel.length === 0 || !maxNumberOfItems"
2323
type="button"
2424
class="umb-node-preview-add"
2525
ng-click="openCurrentPicker()"
@@ -29,35 +29,35 @@
2929
<span class="sr-only">...</span>
3030
</button>
3131

32-
<div class="umb-contentpicker__min-max-help" ng-if="model.config.multiPicker === true && (model.config.maxNumber > 1 || model.config.minNumber > 0)">
32+
<div class="umb-contentpicker__min-max-help" ng-if="model.config.multiPicker === true && (maxNumberOfItems > 1 || minNumberOfItems > 0) && (renderModel.length !== 0 || (model.validation && model.validation.mandatory))">
3333

3434
<!-- Both min and max items -->
35-
<span ng-if="model.config.minNumber && model.config.maxNumber && model.config.minNumber !== model.config.maxNumber">
36-
<span ng-if="renderModel.length < model.config.maxNumber">Add between {{model.config.minNumber}} and {{model.config.maxNumber}} items</span>
37-
<span ng-if="renderModel.length > model.config.maxNumber">
38-
<localize key="validation_maxCount">You can only have</localize> {{model.config.maxNumber}} <localize key="validation_itemsSelected"> items selected</localize>
35+
<span ng-if="minNumberOfItems !== maxNumberOfItems">
36+
<span ng-if="renderModel.length < maxNumberOfItems">Add between {{minNumberOfItems}} and {{maxNumberOfItems}} items</span>
37+
<span ng-if="renderModel.length > maxNumberOfItems">
38+
<localize key="validation_maxCount">You can only have</localize> {{maxNumberOfItems}} <localize key="validation_itemsSelected"> items selected</localize>
3939
</span>
4040
</span>
4141

4242
<!-- Equal min and max -->
43-
<span ng-if="model.config.minNumber && model.config.maxNumber && model.config.minNumber === model.config.maxNumber">
44-
<span ng-if="renderModel.length < model.config.maxNumber">Add {{model.config.minNumber - renderModel.length}} item(s)</span>
45-
<span ng-if="renderModel.length > model.config.maxNumber">
46-
<localize key="validation_maxCount">You can only have</localize> {{model.config.maxNumber}} <localize key="validation_itemsSelected"> items selected</localize>
43+
<span ng-if="minNumberOfItems === maxNumberOfItems">
44+
<span ng-if="renderModel.length < maxNumberOfItems">Add {{minNumberOfItems - renderModel.length}} item(s)</span>
45+
<span ng-if="renderModel.length > maxNumberOfItems">
46+
<localize key="validation_maxCount">You can only have</localize> {{maxNumberOfItems}} <localize key="validation_itemsSelected"> items selected</localize>
4747
</span>
4848
</span>
4949

5050
<!-- Only max -->
51-
<span ng-if="!model.config.minNumber && model.config.maxNumber">
52-
<span ng-if="renderModel.length < model.config.maxNumber">Add up to {{model.config.maxNumber}} items</span>
53-
<span ng-if="renderModel.length > model.config.maxNumber">
54-
<localize key="validation_maxCount">You can only have</localize> {{model.config.maxNumber}} <localize key="validation_itemsSelected">items selected</localize>
51+
<span ng-if="!minNumberOfItems && maxNumberOfItems">
52+
<span ng-if="renderModel.length < maxNumberOfItems">Add up to {{maxNumberOfItems}} items</span>
53+
<span ng-if="renderModel.length > maxNumberOfItems">
54+
<localize key="validation_maxCount">You can only have</localize> {{maxNumberOfItems}} <localize key="validation_itemsSelected">items selected</localize>
5555
</span>
5656
</span>
5757

5858
<!-- Only min -->
59-
<span ng-if="model.config.minNumber && !model.config.maxNumber && renderModel.length < model.config.minNumber">
60-
Add at least {{model.config.minNumber}} item(s)
59+
<span ng-if="minNumberOfItems && !maxNumberOfItems && renderModel.length < minNumberOfItems">
60+
Add at least {{minNumberOfItems}} item(s)
6161
</span>
6262

6363
</div>
@@ -70,12 +70,12 @@
7070

7171
<div ng-messages="contentPickerForm.minCount.$error" show-validation-on-submit>
7272
<div class="help-inline" ng-message="minCount">
73-
<localize key="validation_minCount">You need to add at least</localize> {{model.config.minNumber}} <localize key="validation_items">items</localize>
73+
<localize key="validation_minCount">You need to add at least</localize> {{minNumberOfItems}} <localize key="validation_items">items</localize>
7474
</div>
7575
</div>
7676
<div ng-messages="contentPickerForm.maxCount.$error" show-validation-on-submit>
7777
<div class="help-inline" ng-message="maxCount">
78-
<localize key="validation_maxCount">You can only have</localize> {{model.config.maxNumber}} <localize key="validation_itemsSelected">items selected</localize>
78+
<localize key="validation_maxCount">You can only have</localize> {{maxNumberOfItems}} <localize key="validation_itemsSelected">items selected</localize>
7979
</div>
8080
</div>
8181

0 commit comments

Comments
 (0)