From c88385a9c1dc362cf51266c85583d89fd06b2965 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr>
Date: Fri, 4 Nov 2022 15:23:48 +0100
Subject: [PATCH] fix: reset results when application settings are modified
 (max iterations, compute precision)

refs #574
---
 src/app/formulaire/definition/form-definition.ts |  8 +++++++-
 src/app/services/app-setup.service.ts            | 12 ++++--------
 2 files changed, 11 insertions(+), 9 deletions(-)

diff --git a/src/app/formulaire/definition/form-definition.ts b/src/app/formulaire/definition/form-definition.ts
index 814db2e70..5a6504ec0 100644
--- a/src/app/formulaire/definition/form-definition.ts
+++ b/src/app/formulaire/definition/form-definition.ts
@@ -10,7 +10,8 @@ import {
     ParamDefinition,
     Result,
     VariatedDetails,
-    Prop_NullParameters
+    Prop_NullParameters,
+    SessionSettings
 } from "jalhyd";
 
 import { FormulaireElement } from "../elements/formulaire-element";
@@ -67,6 +68,7 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs
 
     constructor(parent?: FormulaireNode) {
         super(parent);
+        SessionSettings.instance.addObserver(this);
     }
 
     // surcharge de FormulaireNode::get:uid()
@@ -421,6 +423,10 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs
                     break;
             }
         }
+        else if (sender instanceof SessionSettings) {
+            // reset results if a session setting (max iterations, compute precision) has been modified
+            this.reset();
+        }
     }
 
     /**
diff --git a/src/app/services/app-setup.service.ts b/src/app/services/app-setup.service.ts
index 16e3cf00e..1bc771227 100644
--- a/src/app/services/app-setup.service.ts
+++ b/src/app/services/app-setup.service.ts
@@ -20,31 +20,27 @@ export class ApplicationSetupService extends Observable {
 
     // default builtin values
     public displayPrecision = 3;
-    private _computePrecision = 1e-7; // tied to model
-    private _maxIterations = 100; // tied to model
+    private static readonly _defaultComputePrecision = 1e-7; // tied to model
+    private static readonly _defaultMaxIterations = 100; // tied to model
     public enableNotifications = true;
     public enableHotkeys = false;
     private _enableEmptyFieldsOnFormInit = true;
     private _foldedMessageLog = false;
 
     public set computePrecision(p: number) {
-        this._computePrecision = p;
-        // forward to model
         SessionSettings.precision = p;
     }
 
     public get computePrecision(): number {
-        return this._computePrecision;
+        return SessionSettings.precision;
     }
 
     public set maxIterations(m: number) {
-        this._maxIterations = m;
-        // forward to model
         SessionSettings.maxIterations = m;
     }
 
     public get maxIterations(): number {
-        return this._maxIterations;
+        return SessionSettings.maxIterations;
     }
 
     public get enableEmptyFieldsOnFormInit() {
-- 
GitLab