From 8285ee40db3c617983c2cc6d0ca63af281f420e5 Mon Sep 17 00:00:00 2001
From: Mathias Chouet <mathias.chouet@irstea.fr>
Date: Mon, 20 Apr 2020 17:12:40 +0200
Subject: [PATCH] Fix bug in refreshing fieldsets after compute

---
 src/app/formulaire/definition/form-definition.ts  |  4 ++--
 src/app/formulaire/definition/form-fixedvar.ts    |  1 +
 .../definition/form-macrorugo-compound.ts         | 15 +++++----------
 .../definition/form-parallel-structures.ts        |  2 +-
 src/app/formulaire/definition/form-solveur.ts     |  6 +++---
 .../formulaire/definition/form-verificateur.ts    |  4 ++--
 6 files changed, 14 insertions(+), 18 deletions(-)

diff --git a/src/app/formulaire/definition/form-definition.ts b/src/app/formulaire/definition/form-definition.ts
index d3333d8d6..026ffdba4 100644
--- a/src/app/formulaire/definition/form-definition.ts
+++ b/src/app/formulaire/definition/form-definition.ts
@@ -174,7 +174,7 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs
     }
 
     /** called at the end of parseConfig() */
-    protected completeParse(json: {}) {
+    protected completeParse(firstNotif: boolean = true) {
         this.helpLinks = this._resultsHelpLinks;
     }
 
@@ -294,7 +294,7 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs
             }
         }
 
-        this.completeParse(this._jsonConfig);
+        this.completeParse();
     }
 
     public hasParameter(symbol: string): boolean {
diff --git a/src/app/formulaire/definition/form-fixedvar.ts b/src/app/formulaire/definition/form-fixedvar.ts
index 20314b520..4d553ef88 100644
--- a/src/app/formulaire/definition/form-fixedvar.ts
+++ b/src/app/formulaire/definition/form-fixedvar.ts
@@ -125,6 +125,7 @@ export class FormulaireFixedVar extends FormulaireDefinition {
         for (const fs of this.allFieldsets) {
             fs.updateFields();
         }
+        this.completeParse(false); // re-add observers that were destroyed by updateFields()
     }
 
     // interface Observer
diff --git a/src/app/formulaire/definition/form-macrorugo-compound.ts b/src/app/formulaire/definition/form-macrorugo-compound.ts
index c94dad30a..2fb689c5b 100644
--- a/src/app/formulaire/definition/form-macrorugo-compound.ts
+++ b/src/app/formulaire/definition/form-macrorugo-compound.ts
@@ -51,9 +51,11 @@ export class FormulaireMacrorugoCompound extends FormulaireRepeatableFieldset {
         }
     }
 
-    protected completeParse(json: {}) {
-        this.subscribeFieldsetContainer();
-        this.updateApronState(this.currentNub.properties.getPropValue("inclinedApron"));
+    protected completeParse(firstNotif: boolean = true) {
+        this.fieldsetContainer.addObserver(this);
+        if (firstNotif) {
+            this.updateApronState(this.currentNub.properties.getPropValue("inclinedApron"));
+        }
         this.helpLinks = this._resultsHelpLinks;
     }
 
@@ -65,13 +67,6 @@ export class FormulaireMacrorugoCompound extends FormulaireRepeatableFieldset {
         return n as FieldsetContainer;
     }
 
-    /**
-     * abonnement en tant qu'observateur du FieldsetContainer
-     */
-    private subscribeFieldsetContainer() {
-        this.fieldsetContainer.addObserver(this);
-    }
-
     /**
      * abonnement en tant qu'observateur des NgParameter des FieldSet contenus dans le FieldsetContainer
      */
diff --git a/src/app/formulaire/definition/form-parallel-structures.ts b/src/app/formulaire/definition/form-parallel-structures.ts
index 6e238dd76..6a097c297 100644
--- a/src/app/formulaire/definition/form-parallel-structures.ts
+++ b/src/app/formulaire/definition/form-parallel-structures.ts
@@ -92,7 +92,7 @@ export class FormulaireParallelStructure extends FormulaireRepeatableFieldset {
         return newStructure;
     }
 
-    protected completeParse(json: {}) {
+    protected completeParse(firstNotif: boolean = true) {
         this.subscribeFieldsetContainer();
         this.helpLinks = this._resultsHelpLinks;
     }
diff --git a/src/app/formulaire/definition/form-solveur.ts b/src/app/formulaire/definition/form-solveur.ts
index fad442e85..1e2664d9f 100644
--- a/src/app/formulaire/definition/form-solveur.ts
+++ b/src/app/formulaire/definition/form-solveur.ts
@@ -27,8 +27,8 @@ export class FormulaireSolveur extends FormulaireFixedVar {
         this._searchedParamSelectId = this.getOption(json, "searchedParamSelectId");
     }
 
-    protected completeParse(json: {}, firstNotif: boolean = true) {
-        super.completeParse(json);
+    protected completeParse(firstNotif: boolean = true) {
+        super.completeParse();
         if (this._targetNubSelectId) {
             const sel = this.getFormulaireNodeById(this._targetNubSelectId);
             if (sel) {
@@ -93,7 +93,7 @@ export class FormulaireSolveur extends FormulaireFixedVar {
                 if (trSel) {
                     (trSel.parent as FieldSet).updateFields();
                     // trick to re-set observers
-                    this.completeParse({}, false);
+                    this.completeParse(false);
                 }
                 // refresh parameters selector
                 this.refreshParameterEntries();
diff --git a/src/app/formulaire/definition/form-verificateur.ts b/src/app/formulaire/definition/form-verificateur.ts
index b72538822..732a659a5 100644
--- a/src/app/formulaire/definition/form-verificateur.ts
+++ b/src/app/formulaire/definition/form-verificateur.ts
@@ -21,8 +21,8 @@ export class FormulaireVerificateur extends FormulaireFixedVar {
         this._speciesListSelectId = this.getOption(json, "speciesListSelectId");
     }
 
-    protected completeParse(json: {}, firstNotif: boolean = true) {
-        super.completeParse(json);
+    protected completeParse(firstNotif: boolean = true) {
+        super.completeParse();
         if (this._targetPassSelectId) {
             const sel = this.getFormulaireNodeById(this._targetPassSelectId);
             if (sel) {
-- 
GitLab