From 7c2d6e8b22d1adc16a2ee3a194b7fa9c17bed401 Mon Sep 17 00:00:00 2001
From: "francois.grand" <francois.grand@irstea.fr>
Date: Mon, 26 Feb 2018 12:33:39 +0100
Subject: [PATCH] correction des messages console
 'ExpressionChangedAfterItHasBeenCheck'

---
 .../base-param-input.component.ts             |  4 ++--
 src/app/components/base/base.component.ts     | 10 ++++++---
 .../generic-input/generic-input.component.ts  | 22 +++++++++++++++----
 .../ngparam-input/ngparam-input.component.ts  |  8 +++----
 .../param-field-line.component.ts             |  6 ++---
 .../param-values/ngparam-max.component.ts     |  6 ++---
 .../param-values/ngparam-min.component.ts     |  6 ++---
 .../param-values/ngparam-step.component.ts    |  6 ++---
 .../param-values/param-values.component.ts    |  6 ++---
 .../param-values/value-list.component.ts      |  6 ++---
 10 files changed, 49 insertions(+), 31 deletions(-)

diff --git a/src/app/components/base-param-input/base-param-input.component.ts b/src/app/components/base-param-input/base-param-input.component.ts
index 7f9812f48..9d836d6d6 100644
--- a/src/app/components/base-param-input/base-param-input.component.ts
+++ b/src/app/components/base-param-input/base-param-input.component.ts
@@ -44,8 +44,8 @@ export class NgBaseParam extends Observable {
     templateUrl: "../generic-input/generic-input.component.html",
 })
 export class BaseParamInputComponent extends GenericInputComponent {
-    constructor(private intlService: InternationalisationService) {
-        super();
+    constructor(private intlService: InternationalisationService, cdRef: ChangeDetectorRef) {
+        super(cdRef);
     }
 
     /**
diff --git a/src/app/components/base/base.component.ts b/src/app/components/base/base.component.ts
index 3d7cef25d..d1c3efca7 100644
--- a/src/app/components/base/base.component.ts
+++ b/src/app/components/base/base.component.ts
@@ -1,6 +1,6 @@
-import { Output, EventEmitter, AfterViewChecked } from "@angular/core";
+import { Output, EventEmitter, AfterViewChecked, OnChanges } from "@angular/core";
 
-export abstract class BaseComponent implements AfterViewChecked {
+export abstract class BaseComponent implements AfterViewChecked, OnChanges {
     /**
      * true après le 1er affichage du composant
      */
@@ -32,8 +32,12 @@ export abstract class BaseComponent implements AfterViewChecked {
         }
     }
 
+    public ngOnChanges() {
+    }
+
     /**
      * appelé une fois, après l'affichage complet du composant
      */
-    protected abstract afterFirstViewChecked();
+    protected afterFirstViewChecked() {
+    }
 }
\ No newline at end of file
diff --git a/src/app/components/generic-input/generic-input.component.ts b/src/app/components/generic-input/generic-input.component.ts
index e3359da12..578ab729d 100644
--- a/src/app/components/generic-input/generic-input.component.ts
+++ b/src/app/components/generic-input/generic-input.component.ts
@@ -1,4 +1,4 @@
-import { Input, Output, EventEmitter } from "@angular/core";
+import { Input, Output, EventEmitter, ChangeDetectorRef } from "@angular/core";
 
 import { BaseComponent } from "../base/base.component";
 
@@ -79,6 +79,10 @@ export abstract class GenericInputComponent extends BaseComponent {
      */
     private _errorMessageModel: string;
 
+    constructor(private cdRef: ChangeDetectorRef) {
+        super();
+    }
+
     private get isDisabled(): boolean {
         return this._inputDisabled;
     }
@@ -90,6 +94,14 @@ export abstract class GenericInputComponent extends BaseComponent {
         this.onChange.emit({ "action": "valid", "value": this.isValid });
     }
 
+    /**
+     * détection des changements dans l'UI par le ChangeDetector du framework
+     */
+    protected detectChanges() {
+        if (this.cdRef != undefined)
+            this.cdRef.detectChanges();
+    }
+
     /**
      * calcul de la validité globale du composant (UI+modèle)
      */
@@ -107,6 +119,7 @@ export abstract class GenericInputComponent extends BaseComponent {
     private validateUI() {
         let { isValid, message } = this.validateUIValue(this._uiValue);
         this._errorMessageUI = message;
+        this.detectChanges();
         this.setUIValid(isValid);
         return isValid;
     }
@@ -121,6 +134,7 @@ export abstract class GenericInputComponent extends BaseComponent {
     private validateModel() {
         let { isValid, message } = this.validateModelValue(this.getModelValue());
         this._errorMessageModel = message;
+        this.detectChanges();
         this.setModelValid(isValid);
     }
 
@@ -162,6 +176,7 @@ export abstract class GenericInputComponent extends BaseComponent {
         this._model = v;
         this.afterSetModel();
         this.updateAll();
+        this.detectChanges();
     }
 
     /**
@@ -192,10 +207,9 @@ export abstract class GenericInputComponent extends BaseComponent {
     }
 
     /**
-     * appelé après le 1er affichage du composant
-     * @see BaseComponent
+     * appelé quand les @Input changent
      */
-    protected afterFirstViewChecked() {
+    public ngOnChanges() {
         this.updateAll();
     }
 
diff --git a/src/app/components/ngparam-input/ngparam-input.component.ts b/src/app/components/ngparam-input/ngparam-input.component.ts
index a5ce7ec9b..23cd83d34 100644
--- a/src/app/components/ngparam-input/ngparam-input.component.ts
+++ b/src/app/components/ngparam-input/ngparam-input.component.ts
@@ -28,13 +28,13 @@ export class NgParamInputComponent extends GenericInputComponent implements Obse
      */
     private _tmp: number;
 
-    constructor(private intlService: InternationalisationService) {
-        super();
+    constructor(private intlService: InternationalisationService, cdRef: ChangeDetectorRef) {
+        super(cdRef);
     }
 
     /**
-       * appelé avant le changement de modèle
-       */
+     * appelé avant le changement de modèle
+     */
     protected beforeSetModel() {
         if (this._paramDef != undefined)
             this._paramDef.removeObserver(this);
diff --git a/src/app/components/param-field-line/param-field-line.component.ts b/src/app/components/param-field-line/param-field-line.component.ts
index 604f87eb0..b6c40c242 100644
--- a/src/app/components/param-field-line/param-field-line.component.ts
+++ b/src/app/components/param-field-line/param-field-line.component.ts
@@ -1,4 +1,4 @@
-import { Component, ViewChild, Input, Output, EventEmitter, AfterViewChecked } from "@angular/core";
+import { Component, ViewChild, Input, Output, EventEmitter, OnChanges } from "@angular/core";
 
 import { InternationalisationService } from "../../services/internationalisation/internationalisation.service";
 import { NgParameter, ParamRadioConfig } from "../../formulaire/ngparam";
@@ -25,7 +25,7 @@ import { FormulaireService } from "../../services/formulaire/formulaire.service"
         }`
     ]
 })
-export class ParamFieldLineComponent implements AfterViewChecked {
+export class ParamFieldLineComponent implements OnChanges {
     @Input("param")
     private _param: NgParameter;
 
@@ -257,7 +257,7 @@ export class ParamFieldLineComponent implements AfterViewChecked {
         this.emitValidity()
     }
 
-    public ngAfterViewChecked() {
+    public ngOnChanges() {
         this._ngParamInputComponent.model = this._param;
         this._ngParamInputComponent.showError = this.isRadioFixChecked;
     }
diff --git a/src/app/components/param-values/ngparam-max.component.ts b/src/app/components/param-values/ngparam-max.component.ts
index f6cbbbeaa..ae6852ef8 100644
--- a/src/app/components/param-values/ngparam-max.component.ts
+++ b/src/app/components/param-values/ngparam-max.component.ts
@@ -1,4 +1,4 @@
-import { Component, Input } from "@angular/core";
+import { Component, Input, ChangeDetectorRef } from "@angular/core";
 
 import { NumericalString } from "jalhyd";
 
@@ -11,8 +11,8 @@ import { NgParameter } from "../../formulaire/ngparam";
     templateUrl: "../generic-input/generic-input.component.html"
 })
 export class NgParamMaxComponent extends GenericInputComponent {
-    constructor(private intlService: InternationalisationService) {
-        super();
+    constructor(private intlService: InternationalisationService, cdRef: ChangeDetectorRef) {
+        super(cdRef);
     }
 
     /**
diff --git a/src/app/components/param-values/ngparam-min.component.ts b/src/app/components/param-values/ngparam-min.component.ts
index cd00396c1..162307df2 100644
--- a/src/app/components/param-values/ngparam-min.component.ts
+++ b/src/app/components/param-values/ngparam-min.component.ts
@@ -1,4 +1,4 @@
-import { Component, Input } from "@angular/core";
+import { Component, Input, ChangeDetectorRef } from "@angular/core";
 
 import { NumericalString } from "jalhyd";
 
@@ -11,8 +11,8 @@ import { NgParameter } from "../../formulaire/ngparam";
     templateUrl: "../generic-input/generic-input.component.html"
 })
 export class NgParamMinComponent extends GenericInputComponent {
-    constructor(private intlService: InternationalisationService) {
-        super();
+    constructor(private intlService: InternationalisationService, cdRef: ChangeDetectorRef) {
+        super(cdRef);
     }
 
     /**
diff --git a/src/app/components/param-values/ngparam-step.component.ts b/src/app/components/param-values/ngparam-step.component.ts
index 3825d5280..a1467d295 100644
--- a/src/app/components/param-values/ngparam-step.component.ts
+++ b/src/app/components/param-values/ngparam-step.component.ts
@@ -1,4 +1,4 @@
-import { Component, Input } from "@angular/core";
+import { Component, Input, ChangeDetectorRef } from "@angular/core";
 
 import { NumericalString } from "jalhyd";
 
@@ -11,8 +11,8 @@ import { NgParameter } from "../../formulaire/ngparam";
     templateUrl: "../generic-input/generic-input.component.html"
 })
 export class NgParamStepComponent extends GenericInputComponent {
-    constructor(private intlService: InternationalisationService) {
-        super();
+    constructor(private intlService: InternationalisationService, cdRef: ChangeDetectorRef) {
+        super(cdRef);
     }
 
     /**
diff --git a/src/app/components/param-values/param-values.component.ts b/src/app/components/param-values/param-values.component.ts
index 8ec032838..ff493337b 100644
--- a/src/app/components/param-values/param-values.component.ts
+++ b/src/app/components/param-values/param-values.component.ts
@@ -317,10 +317,10 @@ export class ParamValuesComponent extends BaseComponent implements AfterViewChec
         this._param.valueMode = next;
     }
 
-    /**
-     * appelé au 1er affichage du composant
+    /** 
+     * appelé quand les @Input changent
      */
-    protected afterFirstViewChecked() {
+    ngOnChanges() {
         if (this.isMinMax)
             this._doInitMinmax = true;
         else
diff --git a/src/app/components/param-values/value-list.component.ts b/src/app/components/param-values/value-list.component.ts
index 2286d317e..86e37fe7c 100644
--- a/src/app/components/param-values/value-list.component.ts
+++ b/src/app/components/param-values/value-list.component.ts
@@ -1,4 +1,4 @@
-import { Component, Input } from "@angular/core";
+import { Component, Input, ChangeDetectorRef } from "@angular/core";
 
 import { GenericInputComponent } from "../generic-input/generic-input.component";
 import { InternationalisationService } from "../../services/internationalisation/internationalisation.service";
@@ -10,8 +10,8 @@ import { Message } from "jalhyd";
     templateUrl: "../generic-input/generic-input.component.html"
 })
 export class ValueListComponent extends GenericInputComponent {
-    constructor(private intlService: InternationalisationService) {
-        super();
+    constructor(private intlService: InternationalisationService, cdRef: ChangeDetectorRef) {
+        super(cdRef);
     }
 
     /**
-- 
GitLab