Failed to fetch fork details. Try again later.
-
Dorchies David authored
Refs #108
ae70dd4b
Forked from
HYCAR-Hydro / airGR
Source project has a limited visibility.
import { Component, ViewChild, Input, Output, EventEmitter, OnChanges } from "@angular/core";
import { I18nService } from "../../services/internationalisation/internationalisation.service";
import { NgParameter, ParamRadioConfig } from "../../formulaire/ngparam";
import { NgParamInputComponent } from "../ngparam-input/ngparam-input.component";
import { ServiceFactory } from "../../services/service-factory";
import { ParamValueMode, CalculatorType, ParallelStructure } from "jalhyd";
import { FormulaireService } from "../../services/formulaire/formulaire.service";
import { ParamLinkComponent } from "../param-link/param-link.component";
import { ParamComputedComponent } from "../param-computed/param-computed.component";
import { ParamValuesComponent } from "../param-values/param-values.component";
/**
* Sélecteur de mode pour chaque paramètre: fixé, varier, calculer, lié
*/
@Component({
selector: "param-field-line",
templateUrl: "./param-field-line.component.html",
styleUrls: [
"./param-field-line.component.scss"
]
})
export class ParamFieldLineComponent implements OnChanges {
constructor() {
this.intlService = ServiceFactory.instance.i18nService;
this._formService = ServiceFactory.instance.formulaireService;
this.valid = new EventEmitter();
this.inputChange = new EventEmitter();
}
private get uitextParamFixe() {
return this.intlService.localizeText("INFO_PARAMFIELD_PARAMFIXE");
}
private get uitextParamVarier() {
return this.intlService.localizeText("INFO_PARAMFIELD_PARAMVARIER");
}
private get uitextParamCalculer() {
return this.intlService.localizeText("INFO_PARAMFIELD_PARAMCALCULER");
}
private get uitextParamLie() {
return this.intlService.localizeText("INFO_PARAMFIELD_PARAMLIE");
}
/**
* Parameter symbol (Q, Ks, B, ...) input attribute
*/
private get symbol(): string {
return this.param.symbol;
}
// états des boutons pour l'interface
private get radioFixCheck(): string {
return this.isRadioFixChecked ? "checked" : undefined;
}
private get radioVarCheck(): string {
return this.isRadioVarChecked ? "checked" : undefined;
}
private get radioCalCheck(): string {
return this.isRadioCalChecked ? "checked" : undefined;
}
private get radioLinkCheck(): string {
return this.isRadioLinkChecked ? "checked" : undefined;
}
// états booléens des boutons
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
public get isRadioFixChecked(): boolean {
return this.param.radioState === ParamRadioConfig.FIX;
}
public get isRadioVarChecked(): boolean {
return this.param.radioState === ParamRadioConfig.VAR;
}
public get isRadioCalChecked(): boolean {
return this.param.radioState === ParamRadioConfig.CAL;
}
public get isRadioLinkChecked(): boolean {
return this.param.radioState === ParamRadioConfig.LINK;
}
/**
* validité des saisies du composant
*/
public get isValid(): boolean {
switch (this.param.radioState) {
case ParamRadioConfig.FIX:
return this._isInputValid;
case ParamRadioConfig.VAR:
return this._isRangeValid;
case ParamRadioConfig.LINK:
// at first this._paramLinkComponent is undefined until view is refreshed
return this._paramLinkComponent ? this._paramLinkComponent.isValid : true;
default:
return true;
}
}
public get formHasResults(): boolean {
return ServiceFactory.instance.formulaireService.currentFormHasResults;
}
@Input()
public param: NgParameter;
@ViewChild(NgParamInputComponent)
private _ngParamInputComponent: NgParamInputComponent;
@ViewChild(ParamComputedComponent)
private _paramComputedComponent: ParamComputedComponent;
@ViewChild(ParamValuesComponent)
private _paramValuesComponent: ParamValuesComponent;
@ViewChild(ParamLinkComponent)
private _paramLinkComponent: ParamLinkComponent;
@Output()
private valid: EventEmitter<void>;
@Output()
private inputChange: EventEmitter<void>;
/** true si la valeur saisie est valide */
private _isInputValid = false;
/** true si le min-max/liste est valide */
private _isRangeValid = true;
private intlService: I18nService;
private _formService: FormulaireService;
/*
141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
* 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
*/
@Output()
private radio = new EventEmitter<any>();
/**
* classe du radio "fixé"
*/
private on = true;
private onClass = "btn-on";
private offClass = "btn-off";
/**
* calcule la présence du radio "paramètre fixé"
*/
public hasRadioFix(): boolean {
switch (this.param.radioConfig) {
case ParamRadioConfig.FIX:
return this.hasRadioLink(); // gné ?
default:
return true;
}
}
/**
* calcule la présence du radio "paramètre à varier"
*/
public hasRadioVar(): boolean {
switch (this.param.radioConfig) {
case ParamRadioConfig.VAR:
case ParamRadioConfig.CAL:
return true;
default:
return false;
}
}
/**
* calcule la présence du radio "paramètre à calculer"
*/
public hasRadioCal(): boolean {
switch (this.param.radioConfig) {
case ParamRadioConfig.CAL:
return true;
default:
return false;
}
}
/**
* calcule la présence du radio "paramètre lié" (importé d'un autre module de calcul)
*/
public hasRadioLink(): boolean {
if (this._formService.formulaires.length > 0) {
// au moins 2 modules de calcul ouverts
if (this._formService.formulaires.length > 1) {
return this._formService.getLinkableValues(this.param).length > 0;
}
// ou un seul module de calcul "ouvrages parallèles"
if (this._formService.formulaires[0].calculatorType === CalculatorType.ParallelStructure) {
const ps: ParallelStructure = this._formService.formulaires[0].currentNub as ParallelStructure;
if (ps.structures.length > 1) {
return this._formService.getLinkableValues(this.param).length > 0;
}