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