From 243ce6d386b1c0130e7e95a70796839f84fd0873 Mon Sep 17 00:00:00 2001 From: Coleman Watts Date: Thu, 16 Jan 2020 10:53:24 -0500 Subject: [PATCH] Support is_primary fields and boolean options. Civi 5.23 changes boolean options to be real true and false instead of '1' and '0' so added version bump to keep in step. --- ext/afform/core/ang/af/Field.js | 23 +++++++++++++++++-- ext/afform/core/ang/af/Repeat.js | 3 ++- ext/afform/core/ang/af/afRepeat.html | 2 +- ext/afform/core/ang/af/fields/CheckBox.html | 2 +- ext/afform/core/ang/af/fields/Radio.html | 2 +- .../core/ang/afjoinAddressDefault.aff.html | 1 + .../core/ang/afjoinEmailDefault.aff.html | 1 + ext/afform/core/ang/afjoinIMDefault.aff.html | 1 + .../core/ang/afjoinPhoneDefault.aff.html | 1 + ext/afform/core/info.xml | 4 ++-- ext/afform/gui/info.xml | 4 ++-- ext/afform/html/info.xml | 4 ++-- ext/afform/mock/info.xml | 4 ++-- 13 files changed, 38 insertions(+), 14 deletions(-) diff --git a/ext/afform/core/ang/af/Field.js b/ext/afform/core/ang/af/Field.js index e23beaefbd..12c1726ad0 100644 --- a/ext/afform/core/ang/af/Field.js +++ b/ext/afform/core/ang/af/Field.js @@ -14,14 +14,16 @@ var ts = $scope.ts = CRM.ts('afform'), closestController = $($el).closest('[af-fieldset],[af-join],[af-repeat-item]'), afForm = ctrls[0], - boolOptions = [{key: '1', label: ts('Yes')}, {key: '0', label: ts('No')}]; + boolOptions = [{key: true, label: ts('Yes')}, {key: false, label: ts('No')}], + // Only used for is_primary radio button + noOptions = [{key: true, label: ''}]; $scope.dataProvider = closestController.is('[af-repeat-item]') ? ctrls[3] : ctrls[2] || ctrls[1]; $scope.fieldId = afForm.getFormMeta().name + '-' + $scope.fieldName + '-' + id++; $el.addClass('af-field-type-' + _.kebabCase($scope.defn.input_type)); $scope.getOptions = function() { - return $scope.defn.options || boolOptions; + return $scope.defn.options || ($scope.fieldName === 'is_primary' && $scope.defn.input_type === 'Radio' ? noOptions : boolOptions); }; $scope.select2Options = function() { @@ -32,6 +34,23 @@ }; }; + // is_primary field - watch others in this afRepeat block to ensure only one is selected + if ($scope.fieldName === 'is_primary' && 'repeatIndex' in $scope.dataProvider) { + $scope.$watch('dataProvider.afRepeat.getEntityController().getData()', function (items, prev) { + var index = $scope.dataProvider.repeatIndex; + // Set first item to primary if there isn't a primary + if (items && !index && !_.find(items, 'is_primary')) { + $scope.dataProvider.getFieldData().is_primary = true; + } + // Set this item to not primary if another has been selected + if (items && prev && items.length === prev.length && items[index].is_primary && prev[index].is_primary && + _.filter(items, 'is_primary').length > 1 + ) { + $scope.dataProvider.getFieldData().is_primary = false; + } + }, true); + } + // ChainSelect - watch control field & reload options as needed if ($scope.defn.input_type === 'ChainSelect') { $scope.$watch('dataProvider.getFieldData()[defn.input_attrs.controlField]', function(val) { diff --git a/ext/afform/core/ang/af/Repeat.js b/ext/afform/core/ang/af/Repeat.js index bb25e5f820..2055f7edce 100644 --- a/ext/afform/core/ang/af/Repeat.js +++ b/ext/afform/core/ang/af/Repeat.js @@ -59,7 +59,8 @@ restrict: 'A', require: ['afRepeatItem', '^^afRepeat'], bindToController: { - item: '=afRepeatItem' + item: '=afRepeatItem', + repeatIndex: '=' }, link: function($scope, $el, $attr, ctrls) { var self = ctrls[0]; diff --git a/ext/afform/core/ang/af/afRepeat.html b/ext/afform/core/ang/af/afRepeat.html index 98346d3fe9..7c7ef36eb1 100644 --- a/ext/afform/core/ang/af/afRepeat.html +++ b/ext/afform/core/ang/af/afRepeat.html @@ -1,4 +1,4 @@ -
+
diff --git a/ext/afform/core/ang/af/fields/CheckBox.html b/ext/afform/core/ang/af/fields/CheckBox.html index de7d94c85f..8788043cb9 100644 --- a/ext/afform/core/ang/af/fields/CheckBox.html +++ b/ext/afform/core/ang/af/fields/CheckBox.html @@ -4,4 +4,4 @@ - + diff --git a/ext/afform/core/ang/af/fields/Radio.html b/ext/afform/core/ang/af/fields/Radio.html index 5df0bba49e..7237a698c5 100644 --- a/ext/afform/core/ang/af/fields/Radio.html +++ b/ext/afform/core/ang/af/fields/Radio.html @@ -1,4 +1,4 @@ diff --git a/ext/afform/core/ang/afjoinAddressDefault.aff.html b/ext/afform/core/ang/afjoinAddressDefault.aff.html index 76d21e406f..ddb1f017ed 100644 --- a/ext/afform/core/ang/afjoinAddressDefault.aff.html +++ b/ext/afform/core/ang/afjoinAddressDefault.aff.html @@ -1,6 +1,7 @@
+
diff --git a/ext/afform/core/ang/afjoinEmailDefault.aff.html b/ext/afform/core/ang/afjoinEmailDefault.aff.html index 71feccef5b..9b1ed00145 100644 --- a/ext/afform/core/ang/afjoinEmailDefault.aff.html +++ b/ext/afform/core/ang/afjoinEmailDefault.aff.html @@ -1,4 +1,5 @@
+
diff --git a/ext/afform/core/ang/afjoinIMDefault.aff.html b/ext/afform/core/ang/afjoinIMDefault.aff.html index 796881103d..decf4c7af1 100644 --- a/ext/afform/core/ang/afjoinIMDefault.aff.html +++ b/ext/afform/core/ang/afjoinIMDefault.aff.html @@ -2,4 +2,5 @@ +
diff --git a/ext/afform/core/ang/afjoinPhoneDefault.aff.html b/ext/afform/core/ang/afjoinPhoneDefault.aff.html index c1ffc3ebc8..9d9ebc5108 100644 --- a/ext/afform/core/ang/afjoinPhoneDefault.aff.html +++ b/ext/afform/core/ang/afjoinPhoneDefault.aff.html @@ -2,4 +2,5 @@ +
diff --git a/ext/afform/core/info.xml b/ext/afform/core/info.xml index 5cc0e38e69..a0c34129e1 100644 --- a/ext/afform/core/info.xml +++ b/ext/afform/core/info.xml @@ -15,10 +15,10 @@ http://www.gnu.org/licenses/agpl-3.0.html 2020-01-09 - 0.4 + 0.5 alpha - 5.22 + 5.23 org.civicrm.api4 diff --git a/ext/afform/gui/info.xml b/ext/afform/gui/info.xml index 4f38c118b5..b03aca593e 100644 --- a/ext/afform/gui/info.xml +++ b/ext/afform/gui/info.xml @@ -15,10 +15,10 @@ http://www.gnu.org/licenses/agpl-3.0.html 2020-01-09 - 0.4 + 0.5 alpha - 5.22 + 5.23 Drag-n-drop form builder for CiviCRM Afforms. diff --git a/ext/afform/html/info.xml b/ext/afform/html/info.xml index 12073096b2..fca64082a3 100644 --- a/ext/afform/html/info.xml +++ b/ext/afform/html/info.xml @@ -15,10 +15,10 @@ http://www.gnu.org/licenses/agpl-3.0.html 2020-01-09 - 0.4 + 0.5 alpha - 5.22 + 5.23 org.civicrm.afform diff --git a/ext/afform/mock/info.xml b/ext/afform/mock/info.xml index 7e7ea1cca0..7fefe5b47e 100644 --- a/ext/afform/mock/info.xml +++ b/ext/afform/mock/info.xml @@ -15,10 +15,10 @@ http://www.gnu.org/licenses/agpl-3.0.html 2020-01-09 - 0.4 + 0.5 alpha - 5.22 + 5.23 org.civicrm.afform -- 2.25.1