Failed to fetch fork details. Try again later.
-
Olivier Kaufmann authored3cfe2a06
Forked from
reversaal / OhmPi
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;
}
211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
}
}
return false;
}
private onRadioClick(option: string) {
const oldValue = this.param.valueMode;
switch (option) {
case "fix":
this.param.valueMode = ParamValueMode.SINGLE;
// reset the value to avoid "undefined" after exiting CALC or LINK mode
this.param.setValue(this, this.param.paramDefinition.paramValues.singleValue);
break;
case "var":
// prevent setting LISTE mode back to MINMAX if someone clicks "variable" again
// after setting variable mode to LISTE
if (oldValue !== ParamValueMode.MINMAX && oldValue !== ParamValueMode.LISTE) {
this.param.valueMode = ParamValueMode.MINMAX; // min/max par défaut
}
if (this._paramValuesComponent) {
// re-open modal when clicking the "var" mode button again (PoLS)
this._paramValuesComponent.openDialog();
}
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) {
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) {
281282283284285286287288289290291292293294295296297298299300301302303304305306
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();
}
}
}