An error occurred while loading the file. Please try again.
-
Mathias Chouet authoreda6568efc
import { Component, OnInit, DoCheck, OnDestroy, ViewChild, ViewChildren,
QueryList, AfterViewChecked, ElementRef } from "@angular/core";
import { ActivatedRoute, Router } from "@angular/router";
import { Observer, Session, Cloisons, Pab, ParamValueMode, CalculatorType } from "jalhyd";
import { FormulaireService } from "../../services/formulaire/formulaire.service";
import { I18nService } from "../../services/internationalisation/internationalisation.service";
import { FieldSet } from "../../formulaire/fieldset";
import { FormulaireDefinition } from "../../formulaire/definition/form-definition";
import { CalculatorResultsComponent } from "../../components/calculator-results/calculator-results.component";
import { Subscription } from "rxjs";
import { FieldSetComponent } from "../field-set/field-set.component";
import { BaseComponent } from "../base/base.component";
import { CalculatorNameComponent } from "./calc-name.component";
import { FormulaireElement } from "../../formulaire/formulaire-element";
import { FieldsetContainer } from "../../formulaire/fieldset-container";
import { FieldsetContainerComponent } from "../fieldset-container/fieldset-container.component";
import { PabTableComponent } from "../pab-table/pab-table.component";
import { ServiceFactory } from "../../services/service-factory";
import { MatDialog } from "@angular/material";
import { DialogConfirmCloseCalcComponent } from "../dialog-confirm-close-calc/dialog-confirm-close-calc.component";
import { DialogGeneratePABComponent } from "../dialog-generate-pab/dialog-generate-pab.component";
import { PabTable } from "../../formulaire/pab-table";
@Component({
selector: "hydrocalc",
templateUrl: "./calculator.component.html",
styleUrls: ["./calculator.component.scss"]
})
export class GenericCalculatorComponent extends BaseComponent implements OnInit, DoCheck, AfterViewChecked, OnDestroy, Observer {
/**
* liste des FieldSetComponent
*/
@ViewChildren(FieldSetComponent)
private _fieldsetComponents: QueryList<FieldSetComponent>;
/**
* liste des FieldsetContainerComponent
*/
@ViewChildren(FieldsetContainerComponent)
private _fieldsetContainerComponents: QueryList<FieldsetContainerComponent>;
/**
* PabTableComponent if any
*/
@ViewChild(PabTableComponent)
private _pabTableComponent: PabTableComponent;
/**
* composant d'affichage des résultats
*/
@ViewChild(CalculatorResultsComponent)
private resultsComponent: CalculatorResultsComponent;
/**
* composant "nom du module de calcul"
*/
@ViewChild(CalculatorNameComponent)
private _calculatorNameComponent: CalculatorNameComponent;
/**
* formulaire affiché
*/
private _formulaire: FormulaireDefinition;
private _subscription: Subscription; // pour souscrire aux changements d'URL envoyés par le routeur
/**
* true si on a cliqué sur le bouton de lancement de calcul
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
*/
private _computeClicked: boolean;
/**
* flag de validité gloable de la saisie
* NB : la validité du bouton "calculer" dépend de la validité de la saisie dans l'UI et de celle indiquée par le formulaire.
* La validité de l'UI comprend la forme (pas de chaîne alpha dans les champs numériques, etc..).
* La validité formulaire comprend le domaine de définition des valeurs saisies.
*/
private _isUIValid = false;
/**
* flag disabled du bouton "calculer"
*/
public isCalculateDisabled = true;
/**
* flag (+info) indiquant un événement radio à traiter
* nécessaire avec l'introduction du mode de valeur LINK des paramètres car quand on modifie le mode à LINK, les possibles
* paramètres liables ne sont pas encore connus
*/
private _pendingRadioClick = false;
private _pendingRadioClickInfo: any;
// services
private intlService: I18nService;
private formulaireService: FormulaireService;
public get ID() {
if (this._formulaire) {
return this._formulaire.uid;
} else {
return "calculator_1";
}
}
constructor(
private route: ActivatedRoute,
private router: Router,
private confirmCloseCalcDialog: MatDialog,
private generatePABDialog: MatDialog,
private _elementRef: ElementRef
) {
super();
this.intlService = ServiceFactory.instance.i18nService;
this.formulaireService = ServiceFactory.instance.formulaireService;
}
public get formElements(): FormulaireElement[] {
if (this._formulaire === undefined) {
return [];
}
return this._formulaire.kids as FormulaireElement[];
}
/**
* détermine si un FormulaireElement est du type FieldSet
*/
public isFieldset(fe: any): boolean {
return fe instanceof FieldSet;
}
/**
* détermine si un FormulaireElement est du type FieldsetContainer
*/
public isFieldsetContainer(fe: any): boolean {
return fe instanceof FieldsetContainer;
}
141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
/**
* détermine si un FormulaireElement est du type PabTable
*/
public isPabTable(fe: any): boolean {
return fe instanceof PabTable;
}
public get hasForm() {
return this._formulaire !== undefined;
}
public get hasResults() {
if (this.hasForm) {
return this._formulaire.hasResults;
}
return false;
}
public get uitextTitre() {
if (this.hasForm) {
return this.formulaireService.getLocalisedTitleFromCalculatorType(this._formulaire.calculatorType);
}
}
public get uitextCalculer() {
return this.intlService.localizeText("INFO_CALCULATOR_CALCULER");
}
public get uitextCalculatorName() {
return this.intlService.localizeText("INFO_CALCULATOR_CALC_NAME");
}
public get uitextResultsTitle() {
return this.intlService.localizeText("INFO_CALCULATOR_RESULTS_TITLE");
}
public get uitextGeneratePAB() {
return this.intlService.localizeText("INFO_CALCULATOR_RESULTS_GENERATE_PAB");
}
/**
* Triggered at calculator instanciation
*/
ngOnInit() {
this.formulaireService.addObserver(this);
this.subscribeRouter();
}
ngDoCheck() {
this.isCalculateDisabled = ! this._isUIValid;
}
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: string = params["uid"];
this.formulaireService.setCurrentForm(uid);
});
}
private unsubscribeRouter() {
if (this._subscription) {
this._subscription.unsubscribe();
}