-
Grand Francois authored5b5d1d51
import { Component, OnInit, DoCheck, OnDestroy, ViewChild } from "@angular/core";
import { ActivatedRoute } from '@angular/router';
import { FormulaireService } from "../../services/formulaire/formulaire.service";
import { InternationalisationService } from "../../services/internationalisation/internationalisation.service";
import { FieldSet } from "../../formulaire/fieldset";
import { FormulaireDefinition } from "../../formulaire/formulaire-definition";
import { CalculatorType } from "../../formulaire/formulaire-definition";
import { CalculatorResultsComponent } from "../../components/calculator-results/calculator-results.component";
import { Observer } from "../../services/observer";
import { Subscription } from "rxjs/Subscription";
@Component({
selector: 'hydrocalc',
templateUrl: "./calculator.component.html",
styles: [`
.button_compute {
height: 3em;
width: 30%;
}
`
]
})
export class GenericCalculatorComponent implements OnInit, DoCheck, OnDestroy, Observer {
/**
* composant d'affichage des résultats
*/
@ViewChild(CalculatorResultsComponent)
private resultsComponent: CalculatorResultsComponent;
/**
* formulaire affiché
*/
private _formulaire: FormulaireDefinition;
private _subscription: Subscription; // pour souscrire aux changements d'URL envoyés par le routeur
constructor(private intlService: InternationalisationService,
private formulaireService: FormulaireService,
private route: ActivatedRoute) {
}
private get fieldSets(): FieldSet[] {
if (this._formulaire == undefined)
return [];
return this._formulaire.getFieldSets();
}
private hasData() {
return this._formulaire != undefined;
}
private get uitextTitre() {
switch (this._formulaire.calculatorType) {
case CalculatorType.ConduiteDistributrice:
return this.intlService.localizeText("INFO_CONDDISTRI_TITRE");
case CalculatorType.LechaptCalmon:
return this.intlService.localizeText("INFO_LECHAPT_TITRE");
case CalculatorType.RegimeUniforme:
return this.intlService.localizeText("INFO_REGUNI_TITRE");
case CalculatorType.SectionParametree:
return this.intlService.localizeText("INFO_SECTPARAM_TITRE");
case CalculatorType.CourbeRemous:
return this.intlService.localizeText("INFO_REMOUS_TITRE")
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
case CalculatorType.PabDimensions:
return this.intlService.localizeText("INFO_PABDIM_TITRE")
default:
return "Invalid calculator type " + this._formulaire.calculatorType;
}
}
private get uitextCalculer() {
return this.intlService.localizeText("INFO_CALCULATOR_CALCULER");
}
ngOnInit() {
this.intlService.addObserver(this);
this.formulaireService.addObserver(this);
this.subscribeRouter();
}
ngDoCheck() {
// let q = this.getParamFromSymbol("Q"); // A VIRER !!!!
// if (q != undefined) {
// q.radioState = ParamRadioConfig.VAR;
// q.minValue = 1.5;
// q.maxValue = 6;
// q.stepValue = 0.3;
// }
}
ngOnDestroy() {
this.unsubscribeRouter();
this.formulaireService.removeObserver(this);
this.intlService.removeObserver(this);
}
private subscribeRouter() {
// récupération des paramètres passés avec la route (URL)
this._subscription = this.route.params.subscribe(params => {
const uid: number = params['uid'];
this.formulaireService.setCurrentForm(+uid);
});
}
private unsubscribeRouter() {
this._subscription.unsubscribe();
}
/*
* gestion des événements clic sur les radios :
* envoi d'un message au composant parent
* cf. https://angular.io/guide/component-interaction#parent-listens-for-child-event
*/
private onRadioClick(info: string) {
let tmp: string[] = info.split("_");
let symbol: string = tmp[0]; // symbole du paramètre dont vient l'événement radio
let option: string = tmp[1]; // nouvel état (radio)
this._formulaire.resetRadiosAndResults(symbol, option);
}
private onCloseForm() {
this.formulaireService.requestCloseForm(this._formulaire.uid);
}
/**
* met à jour l'interface
*/
// private updateUI() {
// this.appRef.tick();
// this.changeDetectorRef.detectChanges(); // provoque une détection des changements dans les contrôles
//}
141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
private doCompute() {
this._formulaire.doCompute();
this.resultsComponent.updateView();
}
private getFieldsetStyleDisplay(id: string) {
let isDisplayed: boolean = this._formulaire.isDisplayed(id);
return isDisplayed ? "block" : "none";
}
// interface Observer
update(sender: any, data: any): void {
if (sender instanceof InternationalisationService) {
this.formulaireService.updateLocalisation();
}
else if (sender instanceof FormulaireService) {
switch (data["action"]) {
case "currentFormChanged":
const uid: number = +data["formId"];
this._formulaire = this.formulaireService.getFormulaireFromId(uid);
this.resultsComponent.formulaire = this._formulaire;
if (this._formulaire != undefined)
this._formulaire.updateNodeType();
break;
}
}
}
/**
* réception d'un événement d'un select
*/
private onSelectChanged(val: string) {
this._formulaire.resetResults();
this._formulaire.updateNodeType();
this._formulaire.applyDependencies();
}
}