Skip to content
Snippets Groups Projects
Commit 808eacf3 authored by francois.grand's avatar francois.grand
Browse files

NgParameter : implémente Observable pour prévenir NgParamInputComponent des changements de valeur

parent 7bc16824
No related branches found
No related tags found
No related merge requests found
......@@ -150,8 +150,13 @@ export abstract class GenericInputComponent extends BaseComponent {
public set model(v: any) {
this.setAndValidateModel(v);
this.updateAndValidateUI();
}
// MAJ UI
/**
* MAJ et validation de l'UI
*/
protected updateAndValidateUI() {
this._uiValue = this.modelToUI(this.getModelValue());
this.validateUI();
}
......@@ -175,8 +180,8 @@ export abstract class GenericInputComponent extends BaseComponent {
* @see BaseComponent
*/
protected afterFirstViewChecked() {
this._uiValue = this.modelToUI(this.getModelValue());
this.validate();
this.updateAndValidateUI();
this.validateModel();
}
/**
......
......@@ -8,12 +8,13 @@ import { ComputeNodeType, ParamDefinition, NumericalString, Message, MessageCode
import { InternationalisationService } from "../../services/internationalisation/internationalisation.service";
import { NgParameter } from "../../formulaire/ngparam";
import { GenericInputComponent } from "../generic-input/generic-input.component";
import { Observer, IObservable } from "../../services/observer";
@Component({
selector: "ngparam-input",
templateUrl: "../generic-input/generic-input.component.html"
})
export class NgParamInputComponent extends GenericInputComponent {
export class NgParamInputComponent extends GenericInputComponent implements Observer {
/**
* paramètre géré
*/
......@@ -88,5 +89,13 @@ export class NgParamInputComponent extends GenericInputComponent {
if (this._paramDef.isDefined)
this._model = this._paramDef.getValue();
super.afterFirstViewChecked();
this._paramDef.addObserver(this);
}
public update(sender: IObservable, data: any): void {
if (data["action"] == "value") {
this._model = data["value"];
this.updateAndValidateUI();
}
}
}
......@@ -4,6 +4,7 @@ import { InputField } from "./input-field";
import { Dependency } from "./dependency";
import { DependencyConditionType } from "./dependency-condition";
import { ValueDependencyCondition } from "./value-dependency-condition";
import { Observable, IObservable, Observer } from "../services/observer";
export enum ParamRadioConfig {
/**
......@@ -41,7 +42,7 @@ export enum ParamValueMode {
/**
* classe englobante de ParamDefinition (champs supplémentaires pour l'affichage, radio boutons, ...)
*/
export class NgParameter extends InputField {
export class NgParameter extends InputField implements IObservable {
public unit: string;
public radioConfig: ParamRadioConfig;
public radioState: ParamRadioConfig;
......@@ -72,8 +73,15 @@ export class NgParameter extends InputField {
*/
private _valueList: number[];
/**
* implémentation par délégation de IObservable
*/
private _observable: Observable;
constructor(private _paramDef: ParamDefinition, formId: number) {
super(_paramDef.computeNodeType, _paramDef.symbol, formId);
this._observable = new Observable();
this._observable.sender = this;
}
get symbol(): string {
......@@ -90,6 +98,12 @@ export class NgParameter extends InputField {
public setValue(val: number) {
this._paramDef.v = val;
this.notifyObservers(
{
"action": "value",
"value": val
}
)
}
get isDefined(): boolean {
......@@ -270,4 +284,27 @@ export class NgParameter extends InputField {
throw "NgParameter.verifyDependency() : type de condition '" + DependencyConditionType[d.masterCondition.type] + "' non pris en charge";
}
}
// interface IObservable
/**
* ajoute un observateur à la liste
*/
public addObserver(o: Observer) {
this._observable.addObserver(o);
}
/**
* supprime un observateur de la liste
*/
public removeObserver(o: Observer) {
this._observable.removeObserver(o);
}
/**
* notifie un événement aux observateurs
*/
public notifyObservers(data: any) {
this._observable.notifyObservers(data);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment