From 1d27a34e708c0412eb71f99592288476a70644d8 Mon Sep 17 00:00:00 2001 From: colemanw Date: Tue, 22 Aug 2023 14:16:31 -0400 Subject: [PATCH] Afform - Fix clearing fields when deselecting existing entity This regressed in e2c263c427119a6cc40f45e67898fa71240d57bf --- ext/afform/core/ang/af/afForm.component.js | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/ext/afform/core/ang/af/afForm.component.js b/ext/afform/core/ang/af/afForm.component.js index c706043e3b6b..3208ff8b1351 100644 --- a/ext/afform/core/ang/af/afForm.component.js +++ b/ext/afform/core/ang/af/afForm.component.js @@ -43,11 +43,11 @@ // With no arguments this will prefill the entire form based on url args // With selectedEntity, selectedIndex & selectedId provided this will prefill a single entity this.loadData = function(selectedEntity, selectedIndex, selectedId, selectedField) { - var toLoad = 0, - params = {name: ctrl.getFormMeta().name, args: {}}; + let toLoad = false; + const params = {name: ctrl.getFormMeta().name, args: {}}; // Load single entity if (selectedEntity) { - toLoad = 1; + toLoad = !!selectedId; params.matchField = selectedField; params.args[selectedEntity] = {}; params.args[selectedEntity][selectedIndex] = selectedId; @@ -57,7 +57,7 @@ args = _.assign({}, $scope.$parent.routeParams || {}, $scope.$parent.options || {}); _.each(schema, function (entity, entityName) { if (args[entityName] || entity.actions.update) { - toLoad++; + toLoad = true; } if (args[entityName] && typeof args[entityName] === 'string') { args[entityName] = args[entityName].split(','); @@ -79,10 +79,11 @@ } // Clear existing contact selection else if (selectedEntity) { - data[selectedEntity][selectedIndex].fields = {}; - if (data[selectedEntity][selectedIndex].joins) { - data[selectedEntity][selectedIndex].joins = {}; - } + // Delete object keys without breaking object references + Object.keys(data[selectedEntity][selectedIndex].fields).forEach(key => delete data[selectedEntity][selectedIndex].fields[key]); + // Fill pre-set values + angular.merge(data[selectedEntity][selectedIndex].fields, _.cloneDeep(schema[selectedEntity].data || {})); + data[selectedEntity][selectedIndex].joins = {}; } };