An error occurred while loading the file. Please try again.
-
Grand Francois authored
#48 ParamFieldLineComponent.hasRadioLink() : on autorise l'affichage du radio "lié" que s'il y a effectivement des valeurs liables
1eb55db7
import { Component, ViewChild, Input, Output, EventEmitter, OnChanges } from "@angular/core";
import { InternationalisationService } 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";
@Component({
selector: "param-field-line",
templateUrl: "./param-field-line.component.html",
styles: [
`.btn-on {
color:#505050;
border: 3px solid #505050;
background-color:white;
text-transform: uppercase;
font-size: 0.8em;
}`,
`.btn-off {
color:white;
border: 3px solid #505050;
background-color:#505050;
text-transform: uppercase;
font-size: 0.8em;
}`
]
})
export class ParamFieldLineComponent implements OnChanges {
@Input("param")
private _param: NgParameter;
@ViewChild(NgParamInputComponent)
private _ngParamInputComponent: NgParamInputComponent;
@ViewChild(ParamLinkComponent)
private _paramLinkComponent: ParamLinkComponent;
@Output()
private onValid: EventEmitter<void>;
@Output()
private inputChange: EventEmitter<void>;
/**
* true si la valeur saisie est valide
*/
private _isInputValid: boolean = false;
/**
* true si le min-max/liste est valide
*/
private _isRangeValid: boolean = true;
private intlService: InternationalisationService;
private _formService: FormulaireService;
constructor() {
this.intlService = ServiceFactory.instance.internationalisationService;
this._formService = ServiceFactory.instance.formulaireService;
this.onValid = new EventEmitter();
this.inputChange = new EventEmitter();
}
private get title(): string {
let t = "";
if (this._param.label != undefined)
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
t = this._param.label;
if (this._param.unit != undefined && this._param.unit != "")
t = t + " (" + this._param.unit + ")";
return t;
}
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;
}
/**
* calcule la présence du radio "paramètre fixé"
*/
private hasRadioFix(): boolean {
switch (this._param.radioConfig) {
case ParamRadioConfig.FIX:
return this.hasRadioLink();
default:
return true;
}
}
/**
* calcule la présence du radio "paramètre à varier"
*/
private 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"
*/
private hasRadioCal(): boolean {
switch (this._param.radioConfig) {
case ParamRadioConfig.CAL:
return true;
default:
return false;
}
}
/**
141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
* calcule la présence du radio "paramètre lié" (importé d'une autre calculette)
*/
private hasRadioLink(): boolean {
if (this._formService.formulaires.length > 0) {
// au moins 2 calculettes ouvertes
if (this._formService.formulaires.length > 1)
return this._formService.filterLinkableValues(this._formService.getLinkableValues(this._param)).length > 0;
// ou une seule calculette "ouvrages parallèles"
if (this._formService.formulaires[0].calculatorType == CalculatorType.ParallelStructure) {
const ps: ParallelStructure = this._formService.formulaires[0].currentSessionNub.nub as ParallelStructure;
if (ps.structures.length > 1)
return this._formService.filterLinkableValues(this._formService.getLinkableValues(this._param)).length > 0;
}
}
return false;
}
/**
* calcule l'état du radio "paramètre fixé"
*/
private get radioFixCheck(): string {
return this.isRadioFixChecked ? "checked" : undefined;
}
/**
* calcule l'état du radio "paramètre à varier"
*/
private get radioVarCheck(): string {
return this.isRadioVarChecked ? "checked" : undefined;
}
/**
* calcule l'état du radio "paramètre à calculer"
*/
private get radioCalCheck(): string {
if (this._param.radioState == ParamRadioConfig.CAL)
return "checked";
return undefined;
}
/**
* calcule l'état du radio "paramètre lié"
*/
private get radioLinkCheck(): string {
if (this._param.radioState == ParamRadioConfig.LINK)
return "checked";
return undefined;
}
/**
* retourne l'état du radio "paramètre fixé" sous forme booléenne
*/
private get isRadioFixChecked(): boolean {
return this._param.radioState == ParamRadioConfig.FIX;
}
/**
* retourne l'état du radio "paramètre à varier" sous forme booléenne
*/
private get isRadioVarChecked(): boolean {
return this._param.radioState == ParamRadioConfig.VAR;
}
/**
* retourne l'état du radio "paramètre lié" sous forme booléenne
*/
private get isRadioLinkChecked(): boolean {
return this._param.radioState == ParamRadioConfig.LINK;
211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
}
/*
* 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 onRadio = new EventEmitter<any>();
private onRadioClick(option: string) {
const oldValue = this._param.valueMode;
switch (option) {
case "fix":
const oldValueMode = this._param.valueMode;
this._param.valueMode = ParamValueMode.SINGLE;
this._param.setValue(this, this._param.paramDefinition.paramValues.singleValue);
break;
case "var":
this._param.valueMode = ParamValueMode.MINMAX; // min/max par défaut
break;
case "cal":
this._param.valueMode = ParamValueMode.CALCUL;
break;
case "link":
this._param.valueMode = ParamValueMode.LINK;
break;
}
this.onRadio.emit({
"param": this._param,
"oldValueMode": oldValue
});
// MAJ validité
this.emitValidity();
}
/**
* désactivation de tous les boutons radio si paramètre par défaut à "CAL"
*/
private get isDisabled(): boolean {
return this._param.isDefault && this._param.radioState == ParamRadioConfig.CAL;
}
/**
* désactivation du champ de saisie
*/
private get isInputDisabled(): boolean {
return this._param.radioState != ParamRadioConfig.FIX;
}
/**
* classe du radio "fixé"
*/
private on = true;
private onClass = "btn-on"
private offClass = "btn-off"
private get radioFixClass(): string {
if (this.on)
return this.radioFixCheck == undefined ? this.offClass : this.onClass;
return "";
}
/**
281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350
* classe du radio "varier"
*/
private get radioVarClass(): string {
if (this.on)
return this.radioVarCheck == undefined ? this.offClass : this.onClass;
return "";
}
/**
* classe du radio "calculer"
*/
private get radioCalClass(): string {
if (this.on)
return this.radioCalCheck == undefined ? this.offClass : this.onClass;
return "";
}
/**
* classe du radio "lié"
*/
private get radioLinkClass(): string {
if (this.on)
return this.radioLinkCheck == undefined ? this.offClass : this.onClass;
return "";
}
/**
* 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;
default:
return true;
}
}
/**
* émission d'un événement de validité
*/
private emitValidity() {
this.onValid.emit()
}
/**
* réception d'un événement de NgParamInputComponent
*/
private onInputChange(event: any) {
switch (event.action) {
case "valid":
this._isInputValid = event.value;
this.emitValidity();
break;
case "model":
this.inputChange.emit();
break;
}
}
/**
* réception d'un événement de validité de ParamValuesComponent
*/
private onParamValuesValid(event: boolean) {
this._isRangeValid = event;
351352353354355356357358359360361362363364365366367368369370371372373374375376377378
this.emitValidity()
}
public ngOnChanges() {
this._ngParamInputComponent.model = this._param;
this._ngParamInputComponent.showError = this.isRadioFixChecked;
}
private get formHasResults(): boolean {
return ServiceFactory.instance.formulaireService.currentFormHasResults;
}
/**
* relit la valeur dans l'interface et met à jour le NgParameter
*/
public updateParameterFromUI() {
this._ngParamInputComponent.updateModelFromUI();
}
/**
* met à jour les paramètres liés
*/
public updateLinkedParameter() {
if (this._paramLinkComponent !== undefined)
this._paramLinkComponent.updateParamList();
}
}