From b240e441c68510ab8ad841ccb4031a8a28e9dbe1 Mon Sep 17 00:00:00 2001 From: Armand Bahi <armand.bahi@veremes.com> Date: Wed, 2 Jan 2019 10:40:19 +0100 Subject: [PATCH] =?UTF-8?q?Ajout=20de=20watchers=20pour=20d=C3=A9clencher?= =?UTF-8?q?=20les=20valeurs=20dynamiques?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../externs/formReader/formReaderDrtv.js | 60 +++++++++++++++++-- .../externs/formReader/formReaderSrvc.js | 26 +++++--- 2 files changed, 73 insertions(+), 13 deletions(-) diff --git a/src/vitis/client/javascript/externs/formReader/formReaderDrtv.js b/src/vitis/client/javascript/externs/formReader/formReaderDrtv.js index c015d81f..b561f4e1 100644 --- a/src/vitis/client/javascript/externs/formReader/formReaderDrtv.js +++ b/src/vitis/client/javascript/externs/formReader/formReaderDrtv.js @@ -405,11 +405,6 @@ formReader.formReaderDirective = function ($q, formReaderService, propertiesSrvc */ scope['isFieldPresent'] = function (oField, oTab, bCheckButtons) { - // Valeurs dynamiques - if (goog.isDefAndNotNull(oField['dynamic_value'])) { - this['setDynamicValue'](oField); - } - bCheckButtons = goog.isDefAndNotNull(bCheckButtons) ? bCheckButtons : false; // Visible @@ -491,7 +486,11 @@ formReader.formReaderDirective = function ($q, formReaderService, propertiesSrvc } }; - + /** + * Set the filed value using dynamic_value + * + * @param {object} oField + */ scope['setDynamicValue'] = function (oField) { var value = formReaderService['getFormValue'](oField['name']); @@ -504,7 +503,52 @@ formReader.formReaderDirective = function ($q, formReaderService, propertiesSrvc console.error('error with ternary : ' + oField["dynamic_value"]); } } + } + /** + * Ajoute des watchers pour déclencher les dynamic values + * + */ + scope['setFormDynamicValues'] = function () { + + var aAttrs; + var oFormDefinition = scope['oFormDefinition']; + var sFormDefinitionName = scope['sFormDefinitionName']; + + // Nettoyage automatique des watchers + if (goog.isArray(this.dynamicWatchers_)) { + for (var i = this.dynamicWatchers_.length - 1; i >= 0; i--) { + this.dynamicWatchers_[i](); + this.dynamicWatchers_.pop(); + } + } else { + this.dynamicWatchers_ = []; + } + if (goog.isDefAndNotNull(oFormDefinition[sFormDefinitionName])) { + + var aFormElementDefinitions = formReaderService['getAllFormElementDefinition'](sFormDefinitionName, oFormDefinition) + + for (var i = 0; i < aFormElementDefinitions.length; i++) { + if (goog.isDefAndNotNull(aFormElementDefinitions[i]['dynamic_value'])) { + + // Ajoute les watchers sur les champs présents dans l'expression dynamic_value + if(formReaderService["isCustomTernaryString"](aFormElementDefinitions[i]["dynamic_value"], false)) { + aAttrs = formReaderService['getCustomTernaryStringAttrs'](aFormElementDefinitions[i]["dynamic_value"]); + + for (var ii = 0; ii < aAttrs.length; ii++) { + if (goog.isDefAndNotNull(aAttrs[ii][1])) { + + this.dynamicWatchers_.push(scope.$watch('oFormValues[sFormDefinitionName].' + aAttrs[ii][1], angular.bind(this, function(oField, newVal, oldVal, scope){ + + // Set la nouvelle valeur + this['setDynamicValue'](oField); + }, angular.copy(aFormElementDefinitions[i])), true)); + } + } + } + } + } + } } /** @@ -675,8 +719,12 @@ formReader.formReaderDirective = function ($q, formReaderService, propertiesSrvc // Lors du chargement du formulaire scope.$on('loadForm', function () { + // Vide les file inputs scope['resetFileInputs'](); + + // Trigger dynamic values + scope['setFormDynamicValues'](); }); } }; diff --git a/src/vitis/client/javascript/externs/formReader/formReaderSrvc.js b/src/vitis/client/javascript/externs/formReader/formReaderSrvc.js index 5d9017b0..c4dfddeb 100644 --- a/src/vitis/client/javascript/externs/formReader/formReaderSrvc.js +++ b/src/vitis/client/javascript/externs/formReader/formReaderSrvc.js @@ -696,7 +696,6 @@ formReader.formReaderService = function ($translate, $rootScope, $q, $log, $time return false; } }, - /** * translateCustomTernaryString function * Traduit une chaine ternaire customisée par une chaine ternaire exploitable @@ -722,12 +721,7 @@ formReader.formReaderService = function ($translate, $rootScope, $q, $log, $time sString = sString.substr(1); // Cherche les attributs - var aAttrs = []; - var attrRegex = RegExp('{{(\\w*?)}}','g'); - var attrRegexResult; - while ((attrRegexResult = attrRegex.exec(sString)) !== null) { - aAttrs.push(attrRegexResult); - } + var aAttrs = this['getCustomTernaryStringAttrs'](sString); // Remplace les attributs var sReplacer; @@ -762,6 +756,24 @@ formReader.formReaderService = function ($translate, $rootScope, $q, $log, $time return sString; }, + /** + * Cherche les attributs dans l'expression ternaire + * + * @param {string} sString + * @return {array} + */ + "getCustomTernaryStringAttrs": function (sString) { + + // Cherche les attributs + var aAttrs = []; + var attrRegex = RegExp('{{(\\w*?)}}','g'); + var attrRegexResult; + while ((attrRegexResult = attrRegex.exec(sString)) !== null) { + aAttrs.push(attrRegexResult); + } + + return aAttrs; + }, /** * selectFirstOption function. * Sélectionne la 1ere option d'un <select>. -- GitLab