From 1f5b7cb625def16bcccf5b1554216c262e41554c Mon Sep 17 00:00:00 2001
From: "mathias.chouet" <mathias.chouet@irstea.fr>
Date: Fri, 11 Sep 2020 14:24:49 +0200
Subject: [PATCH] Fix #459 - empty fields: preserve default calculated param

---
 src/app/formulaire/elements/formulaire-node.ts | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/src/app/formulaire/elements/formulaire-node.ts b/src/app/formulaire/elements/formulaire-node.ts
index 9a2e5e3c4..03b41d08d 100644
--- a/src/app/formulaire/elements/formulaire-node.ts
+++ b/src/app/formulaire/elements/formulaire-node.ts
@@ -144,16 +144,24 @@ export abstract class FormulaireNode implements IObservable {
      * Set value of all single parameters to undefined, except for the given parameter ids
      */
     public emptyFields(except: string[] = [ "Cd0", "CdWS", "CdGR", "CdGRS", "CdCunge", "CdWR", "CdO", "CdT", "CdWSL" ]) {
-        for (const p of this.allFormElements ) {
+        // save current calculated param, as setting value on a CALC param will
+        // change its mode and choose another calculated param by default
+        let calcP: NgParameter;
+        for (const p of this.allFormElements) {
             if (p instanceof NgParameter) {
                 if (
                     [ ParamValueMode.SINGLE, ParamValueMode.CALCUL ].includes(p.valueMode)
                     && ! except.includes(p.id)
                 ) {
+                    if (p.valueMode === ParamValueMode.CALCUL) {
+                        calcP = p;
+                    }
                     p.setValue(this, undefined);
                 }
             }
         }
+        // restore original calculated param
+        calcP.setCalculated();
     }
 
     /**
-- 
GitLab