An error occurred while loading the file. Please try again.
-
Rousseau Vincent authored1196b4a5
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";
@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 {
constructor() {
this.intlService = ServiceFactory.instance.i18nService;
this._formService = ServiceFactory.instance.formulaireService;
this.valid = new EventEmitter();
this.inputChange = new EventEmitter();
}
public get title(): string {
let t = "";
if (this.param.label !== undefined) {
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 {
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
return this.param.symbol;
}
/**
* 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
*/
public get isRadioFixChecked(): boolean {
return this.param.radioState === ParamRadioConfig.FIX;
}
/**
* retourne l'état du radio "paramètre à varier" sous forme booléenne
*/
public get isRadioVarChecked(): boolean {
return this.param.radioState === ParamRadioConfig.VAR;
}
/**
* retourne l'état du radio "paramètre lié" sous forme booléenne
*/
public get isRadioLinkChecked(): boolean {
return this.param.radioState === ParamRadioConfig.LINK;
}
/**
* 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
*/
public get isInputDisabled(): boolean {
return this.param.radioState !== ParamRadioConfig.FIX;
141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
}
private get radioFixClass(): string {
if (this.on) {
return this.radioFixCheck ? this.onClass : this.offClass;
}
return "";
}
/**
* classe du radio "varier"
*/
private get radioVarClass(): string {
if (this.on) {
return this.radioVarCheck ? this.onClass : this.offClass;
}
return "";
}
/**
* classe du radio "calculer"
*/
private get radioCalClass(): string {
if (this.on) {
return this.radioCalCheck ? this.onClass : this.offClass;
}
return "";
}
/**
* classe du radio "lié"
*/
private get radioLinkClass(): string {
if (this.on) {
return this.radioLinkCheck ? this.onClass : this.offClass;
}
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;
}
}
public get formHasResults(): boolean {
return ServiceFactory.instance.formulaireService.currentFormHasResults;
}
@Input()
private param: NgParameter;
@ViewChild(NgParamInputComponent)
private _ngParamInputComponent: NgParamInputComponent;
@ViewChild(ParamLinkComponent)
private _paramLinkComponent: ParamLinkComponent;
@Output()
private valid: EventEmitter<void>;
211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
@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;
/*
* 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();
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:
281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350
return false;
}
}
/**
* calcule la présence du radio "paramètre lié" (importé d'une autre calculette)
*/
public 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].currentNub as ParallelStructure;
if (ps.structures.length > 1) {
return this._formService.filterLinkableValues(this._formService.getLinkableValues(this.param)).length > 0;
}
}
}
return false;
}
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.radio.emit({
"param": this.param,
"oldValueMode": oldValue
});
// MAJ validité
this.emitValidity();
}
/**
* émission d'un événement de validité
*/
private emitValidity() {
this.valid.emit();
}
/**
* réception d'un événement de NgParamInputComponent
*/
public onInputChange(event: any) {
switch (event.action) {
351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391
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;
this.emitValidity();
}
public ngOnChanges() {
this._ngParamInputComponent.model = this.param;
this._ngParamInputComponent.showError = this.isRadioFixChecked;
}
/**
* 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();
}
}
}