An error occurred while loading the file. Please try again.
-
Mathias Chouet authoredfe2b9012
import { Component, Input, Output, EventEmitter, ViewChildren, QueryList, DoCheck } from "@angular/core";
import { ParamRadioConfig } from "../../formulaire/ngparam";
import { FieldSet } from "../../formulaire/fieldset";
import { ParamFieldLineComponent } from "../param-field-line/param-field-line.component";
import { Field } from "../../formulaire/field";
import { InputField } from "../../formulaire/input-field";
import { SelectField } from "../../formulaire/select-field";
@Component({
selector: "field-set",
templateUrl: "./field-set.component.html",
styleUrls: ["./field-set.component.scss"]
})
export class FieldSetComponent implements DoCheck {
@Input()
private set fieldSet(fs: FieldSet) {
this._fieldSet = fs;
}
public get fields() {
return this._fieldSet.kids;
}
public set fieldsetNumber(n: number) {
this._fieldSet.labelNumber = n;
}
public get title(): string {
if (! this._fieldSet) {
return "fs undefined";
}
if (! this._fieldSet.label) {
return "label undefined";
}
return this._fieldSet.label;
}
public get isValid() {
return this._isValid;
}
/**
* field set attribute
*/
private _fieldSet: FieldSet;
@ViewChildren(ParamFieldLineComponent)
private _paramComponents: QueryList<ParamFieldLineComponent>;
/**
* événement de changement de validité
*/
@Output()
private validChange = new EventEmitter();
/**
* événement de changement de valeur d'un input
*/
@Output()
private inputChange = new EventEmitter();
/**
* événement de demande d'ajout d'un fieldset (FieldSet dans un FieldsetContainer)
*/
@Output()
private addFieldset = new EventEmitter();
/**
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
* événement de demande de remontée d'un fieldset dans la liste (FieldSet dans un FieldsetContainer)
*/
@Output()
private moveFieldsetUp = new EventEmitter();
/**
* événement de demande de descente d'un fieldset dans la liste (FieldSet dans un FieldsetContainer)
*/
@Output()
private moveFieldsetDown = new EventEmitter();
/**
* événement de demande de suppression d'un fieldset (FieldSet dans un FieldsetContainer)
*/
@Output()
private removeFieldset = new EventEmitter();
/**
* flag de validité de la saisie
*/
private _isValid = false;
/**
* flag d'affichage des boutons ajouter, supprimer, monter, descendre
*/
public showButtons = false;
/**
* flag d'activation du bouton monter
*/
public enableUpButton = true;
/**
* flag d'activation du bouton descendre
*/
public enableDownButton = true;
/**
* flag d'activation du bouton supprimer
*/
public enableRemoveButton = true;
/**
* événement de changement d'état d'un radio
*/
// tslint:disable-next-line:no-output-on-prefix
@Output()
private radio = new EventEmitter<any>();
private hasRadioFix(): boolean {
if (this._fieldSet.hasInputs) {
switch (this._fieldSet.getInput(0).radioConfig) {
case ParamRadioConfig.FIX:
return false;
default:
return true;
}
}
return false;
}
private hasRadioVar(): boolean {
if (this._fieldSet.hasInputs) {
switch (this._fieldSet.getInput(0).radioConfig) {
case ParamRadioConfig.VAR:
case ParamRadioConfig.CAL:
return true;
default:
141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
return false;
}
}
return false;
}
private hasRadioCal(): boolean {
if (this._fieldSet.hasInputs) {
switch (this._fieldSet.getInput(0).radioConfig) {
case ParamRadioConfig.CAL:
return true;
default:
return false;
}
}
return false;
}
/**
* détermine si un Field est du type InputField
*/
private isInputField(f: Field): boolean {
return f instanceof InputField && f.isDisplayed;
}
/**
* détermine si un Field est du type SelectField
*/
private isSelectField(f: Field): boolean {
return f instanceof SelectField && f.isDisplayed;
}
/*
* gestion des événements clic sur les radios :
* réception d'un message du composant enfant (param-field)
* cf. https://angular.io/guide/component-interaction#parent-listens-for-child-event
*/
private onRadioClick(info: any) {
// on renvoie l'info au parent
this.radio.emit(info);
}
/**
* calcul de la validité de tous les ParamFieldLineComponent de la vue
*/
private updateValidity() {
this._isValid = false;
if (this._paramComponents) {
this._isValid = this._paramComponents.reduce(
// callback
(
// accumulator (valeur précédente du résultat)
acc,
// currentValue (élément courant dans le tableau)
param,
// currentIndex (indice courant dans le tableau)
currIndex,
// array (tableau parcouru)
array
) => {
return acc && param.isValid;
}
// valeur initiale
, true);
}
this.validChange.emit();
}
211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272
public ngDoCheck() {
this.updateValidity();
}
/**
* réception d'un événement de validité de ParamFieldLineComponent
*/
private onParamLineValid(event: boolean) {
this.updateValidity();
}
/**
* réception d'un événement de changement de valeur d'un input
*/
private onInputChange(event: boolean) {
this.inputChange.emit();
}
/**
* relit les valeurs dans l'interface et met à jour les NgParameter
*/
public updateParametersFromUI() {
this._paramComponents.forEach(fsc => fsc.updateParameterFromUI());
}
/**
* met à jour les paramètres liés
*/
public updateLinkedParameters() {
this._paramComponents.forEach(fsc => fsc.updateLinkedParameter());
}
/**
* clic sur le bouton ajouter
*/
private onAddClick() {
this.addFieldset.emit(this._fieldSet);
}
/**
* clic sur le bouton supprimer
*/
private onRemoveClick() {
this.removeFieldset.emit(this._fieldSet);
}
/**
* clic sur le bouton monter
*/
private onMoveUpClick() {
this.moveFieldsetUp.emit(this._fieldSet);
}
/**
* clic sur le bouton descendre
*/
private onMoveDownClick() {
this.moveFieldsetDown.emit(this._fieldSet);
}
}