LP#1677416: unbreak use of egOrgSelector by egEditFmRecord user/csharp/lp1677416_egEditFmRecord_org_selector
authorGalen Charlton <gmc@equinoxinitiative.org>
Thu, 30 Mar 2017 21:03:07 +0000 (17:03 -0400)
committerChris Sharp <csharp@georgialibraries.org>
Fri, 31 Mar 2017 18:27:46 +0000 (14:27 -0400)
This patch fixes a regression where attempting to change
the value of an egOrgSelector embedded in an egEditFmRecord
would result in errors like this:

Error: [$compile:nonassign] http://errors.angularjs.org/1.5.11/$compile/nonassign?p0=rec_orgs%5Bfield.name%5D()&p1=selected&p2=egOrgSelector

To test
-------
[1] Open the MARC Tag Tables admin interface in the web
    staff client and edit an existing entry. Note that
    changing the selected OU will result in there being
    no change and error messages appearing in the browser
    JavaScript console.
[2] Apply the patch and repeat step 1.
[3] Verify that no errors are logged.

Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Signed-off-by: Chris Sharp <csharp@georgialibraries.org>
Open-ILS/src/templates/staff/share/t_fm_record_editor.tt2
Open-ILS/web/js/ui/default/staff/services/fm_record_editor.js

index 18ee809..f7a7a6e 100644 (file)
@@ -49,8 +49,8 @@
           </select>
         </span>
         <eg-org-selector ng-if="field.datatype == 'org_unit'"
-          selected="rec_orgs[field.name]()"
-          onchange="rec_orgs[field.name]">
+          selected="rec_org_values[field.name]"
+          onchange="rec_orgs[field.name]" nodefault>
         </eg-org-selector>
       </div>
     </div>
index da95d54..be04844 100644 (file)
@@ -74,6 +74,7 @@ angular.module('egFmRecordEditorMod',
 
             $scope.record_label = egCore.idl.classes[$scope.idlClass].label;
             $scope.rec_orgs = {};
+            $scope.rec_org_values = {};
 
             if ($scope.mode == 'update') {
                 egCore.pcrud.retrieve($scope.idlClass, $scope.recordId).then(function(r) {
@@ -161,6 +162,9 @@ angular.module('egFmRecordEditorMod',
                             if (arguments.length == 1) $scope.rec[field.name](org.id());
                             return egCore.org.get($scope.rec[field.name]());
                         }
+                        if ($scope.rec[field.name]()) {
+                            $scope.rec_org_values[field.name] = $scope.rec_orgs[field.name]();
+                        }
                     }
                 });
                 return fields.filter(function(field) { return !(field.name in $scope.hidden) });