From df4b073915fe015bd5c22e67926b101ad2e336da Mon Sep 17 00:00:00 2001 From: "francois.grand" <francois.grand@irstea.fr> Date: Fri, 15 Jun 2018 14:56:36 +0200 Subject: [PATCH] =?UTF-8?q?=20#48=20MAJ=20de=20la=20valeur=20dans=20le=20c?= =?UTF-8?q?hamp=20de=20saisie=20d'un=20param=C3=A8tre=20quand=20on=20chang?= =?UTF-8?q?e=20la=20valeur=20point=C3=A9e=20dans=20le=20select?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ngparam-input/ngparam-input.component.ts | 12 ++++++++++++ .../param-link/param-link.component.ts | 13 +++++++++++-- src/app/formulaire/ngparam.ts | 18 +++++++++++++++--- 3 files changed, 38 insertions(+), 5 deletions(-) diff --git a/src/app/components/ngparam-input/ngparam-input.component.ts b/src/app/components/ngparam-input/ngparam-input.component.ts index abce24cdf..3db763c94 100644 --- a/src/app/components/ngparam-input/ngparam-input.component.ts +++ b/src/app/components/ngparam-input/ngparam-input.component.ts @@ -115,6 +115,18 @@ export class NgParamInputComponent extends GenericInputComponent implements Obse this._tmp = data["value"]; this.updateAndValidateUI(); } + break; + + // changement de valueMode du paramètre ou de valeur à laquelle il est lié + case "valueModeChange": + case "valueLinkChange": + this._tmp = data["value"]; + this.updateAndValidateUI(); + break; } } + + public ngOnDestroy() { + this._paramDef.removeObserver(this); + } } diff --git a/src/app/components/param-link/param-link.component.ts b/src/app/components/param-link/param-link.component.ts index 0ce835b5d..4ea99b759 100644 --- a/src/app/components/param-link/param-link.component.ts +++ b/src/app/components/param-link/param-link.component.ts @@ -1,4 +1,4 @@ -import { Component, Input, Output, EventEmitter, OnChanges } from "@angular/core"; +import { Component, Input, Output, EventEmitter, OnChanges, OnDestroy } from "@angular/core"; import { NgParameter } from "../../formulaire/ngparam"; import { ServiceFactory } from "../../services/service-factory"; @@ -9,7 +9,8 @@ import { FormulaireService } from "../../services/formulaire/formulaire.service" selector: "param-link", templateUrl: "./param-link.component.html" }) -export class ParamLinkComponent implements OnChanges, Observer { +export class ParamLinkComponent implements OnChanges, Observer, OnDestroy { + // paramètre géré (qui sera lié à une valeur, cad qui importe cette valeur) @Input("param") private _param: NgParameter; @@ -116,9 +117,17 @@ export class ParamLinkComponent implements OnChanges, Observer { } public ngOnChanges() { + if (this._param !== undefined) + this._param.removeObserver(this); + this._param.addObserver(this); + this.updateParamList(); } + public ngOnDestroy() { + this._param.removeObserver(this); + } + // interface Observer public update(sender: any, data: any) { diff --git a/src/app/formulaire/ngparam.ts b/src/app/formulaire/ngparam.ts index b48b72503..fee5e2f71 100644 --- a/src/app/formulaire/ngparam.ts +++ b/src/app/formulaire/ngparam.ts @@ -120,8 +120,15 @@ export class NgParameter extends InputField { * crée le lien avec un paramètre */ public linkToParameter(n: Nub, p: ParamDefinition) { - this.valueMode = ParamValueMode.LINK; - this.paramDefinition.defineReference(n, p.symbol); + const changed: boolean = this.paramDefinition.referencedObject !== n || this.paramDefinition.referenceDesc !== p.symbol; + if (changed) { + this.valueMode = ParamValueMode.LINK; + this._paramDef.defineReference(n, p.symbol); + this.notifyObservers({ + "action": "valueLinkChange", + "value": this._paramDef.getValue() + }); + } } get isDefined(): boolean { @@ -144,8 +151,13 @@ export class NgParameter extends InputField { public set valueMode(m: ParamValueMode) { // undefined si on clique en dehors du select après l'avoir ouvert (cad sans avoir fait de sélection) // et au même niveau, cad à côté du bouton et non à côté du menu déroulant - if (m != undefined) + if (m !== undefined && this._paramDef.valueMode !== m) { this._paramDef.valueMode = m; + this.notifyObservers({ + "action": "valueModeChange", + "value": this._paramDef.getValue() + }); + } } public checkMin(min: number): boolean { -- GitLab