param-field-line.component.ts 10.22 KiB
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) { if (this._formService.formulaires.length > 1) return true; 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 true; } } 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 ""; } /** * classe du radio "varier" */
281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350
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; this.emitValidity() }
351352353354355356357358359360361362363364365366367368369370371372373374375376
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(); } }