calculator.component.ts 5.81 KiB
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(); } }