From 381759b865f392f6f7987d8f978172e9a6210970 Mon Sep 17 00:00:00 2001
From: "francois.grand" <francois.grand@irstea.fr>
Date: Thu, 11 Jan 2018 12:18:24 +0100
Subject: [PATCH] =?UTF-8?q?Les=20formulaires=20ouverts=20sont=20mis=20?=
 =?UTF-8?q?=C3=A0=20jour=20en=20cas=20de=20changement=20de=20langue=20-=20?=
 =?UTF-8?q?pour=20les=20formulaires=20qui=20ont=20d=C3=A9j=C3=A0=20des=20r?=
 =?UTF-8?q?=C3=A9sultats=20affich=C3=A9s,=20on=20relance=20le=20calcul?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../generic/calculator.component.ts           | 19 ++++++++++++++++++-
 src/app/formulaire/formulaire-definition.ts   | 15 ++++++++++++++-
 2 files changed, 32 insertions(+), 2 deletions(-)

diff --git a/src/app/calculators/generic/calculator.component.ts b/src/app/calculators/generic/calculator.component.ts
index 91771cd8e..d76f34c7b 100644
--- a/src/app/calculators/generic/calculator.component.ts
+++ b/src/app/calculators/generic/calculator.component.ts
@@ -103,6 +103,7 @@ export class GenericCalculatorComponent implements OnInit, DoCheck, OnDestroy, O
         this.intlService.addObserver(this);
         this.formulaireService.addObserver(this);
         this.subscribeRouter();
+        this.formulaireService.updateLocalisation();
     }
 
     ngDoCheck() {
@@ -168,6 +169,14 @@ export class GenericCalculatorComponent implements OnInit, DoCheck, OnDestroy, O
         return isDisplayed ? "block" : "none";
     }
 
+    private setForm(f: FormulaireDefinition) {
+        if (this._formulaire != undefined)
+            this._formulaire.removeObserver(this);
+        this._formulaire = f;
+        if (this._formulaire != undefined)
+            this._formulaire.addObserver(this);
+    }
+
     // interface Observer
 
     update(sender: any, data: any): void {
@@ -178,13 +187,21 @@ export class GenericCalculatorComponent implements OnInit, DoCheck, OnDestroy, O
             switch (data["action"]) {
                 case "currentFormChanged":
                     const uid: number = +data["formId"];
-                    this._formulaire = this.formulaireService.getFormulaireFromId(uid);
+                    this.setForm(this.formulaireService.getFormulaireFromId(uid));
                     this.resultsComponent.formulaire = this._formulaire;
                     if (this._formulaire != undefined)
                         this._formulaire.updateNodeType();
                     break;
             }
         }
+        else if (sender instanceof FormulaireDefinition) {
+            switch (data["action"]) {
+                case "resultsUpdated":
+                    const f = sender as FormulaireDefinition;
+                    if (this._formulaire.uid == f.uid)
+                        this.resultsComponent.updateView();
+            }
+        }
     }
 
     /**
diff --git a/src/app/formulaire/formulaire-definition.ts b/src/app/formulaire/formulaire-definition.ts
index d9ba762ed..00fe09485 100644
--- a/src/app/formulaire/formulaire-definition.ts
+++ b/src/app/formulaire/formulaire-definition.ts
@@ -23,6 +23,7 @@ import { FixedVarResults } from "../results/fixed-var-results";
 import { SectionResults } from "../results/section-results";
 import { RemousResults } from "../results/remous-results";
 import { StringMap } from "../stringmap";
+import { Observable } from "../services/observer";
 
 
 export enum CalculatorType {
@@ -32,7 +33,7 @@ export enum CalculatorType {
 }
 
 
-export class FormulaireDefinition {
+export class FormulaireDefinition extends Observable {
     /**
      * objet JSON chargé depuis le fichier de configuration de la calculette
      */
@@ -83,6 +84,7 @@ export class FormulaireDefinition {
         private intlService: InternationalisationService,
         private appSetupService: ApplicationSetupService
     ) {
+        super();
         this._uid = FormulaireDefinition.uidGenerator();
         this._fixVarResults = new FixedVarResults();
         this._sectionResults = new SectionResults();
@@ -1151,6 +1153,10 @@ export class FormulaireDefinition {
                 this.doComputeFixedVar();
                 break;
         }
+
+        this.notifyObservers({
+            "action": "resultsUpdated",
+        });
     }
 
     public printDependencies() {
@@ -1174,6 +1180,10 @@ export class FormulaireDefinition {
         return this._remousResults.hasResults();
     }
 
+    private hasResults(): boolean {
+        return this.hasFixVarResults() || this.hasSectionResults() || this.hasRemousResults();
+    }
+
     public updateLocalisation(localisation: StringMap) {
         for (let loc_id in localisation) {
             for (let fs of this._fieldSets) {
@@ -1185,5 +1195,8 @@ export class FormulaireDefinition {
                         p.updateLocalisation(localisation);
             }
         }
+
+        if (this.hasResults())
+            this.doCompute(); // pour mettre à jour la langue
     }
 }
-- 
GitLab