An error occurred while loading the file. Please try again.
-
Gaetano Raffaele authored71829f39
import { MatDialogRef, MAT_DIALOG_DATA } from "@angular/material";
import { Inject, Component, OnInit } from "@angular/core";
import { FormBuilder, FormGroup, Validators } from "@angular/forms";
import { I18nService } from "../../services/internationalisation/internationalisation.service";
import { NgParameter } from "../../formulaire/ngparam";
import { ParamValueMode } from "jalhyd";
import { sprintf } from "sprintf-js";
@Component({
selector: "dialog-edit-param-values",
templateUrl: "dialog-edit-param-values.component.html",
styleUrls: ["dialog-edit-param-values.component.scss"]
})
export class DialogEditParamValuesComponent implements OnInit {
/** the related parameter to change the "variable" value of */
public param: NgParameter;
/** available value modes (min / max, list) */
public valueModes;
/** available decimal separators */
public decimalSeparators;
/** current decimal separator */
public decimalSeparator;
public valuesListForm: FormGroup;
constructor(
public dialogRef: MatDialogRef<DialogEditParamValuesComponent>,
private intlService: I18nService,
private fb: FormBuilder,
@Inject(MAT_DIALOG_DATA) public data: any
) {
this.param = data.param;
if (this.isListe) {
console.log("PARAM LIST VALUE", this.param.valueList);
}
// an explicit ReactiveForm is required for file input component
this.valuesListForm = this.fb.group({
file: [null, null]
});
this.valueModes = [
{
value: ParamValueMode.MINMAX,
label: this.intlService.localizeText("INFO_PARAMMODE_MINMAX")
},
{
value: ParamValueMode.LISTE,
label: this.intlService.localizeText("INFO_PARAMMODE_LIST")
}
];
this.decimalSeparators = [
{
label: this.intlService.localizeText("INFO_PARAMFIELD_PARAMVARIER_SEPARATEUR_POINT"),
value: "."
},
{
label: this.intlService.localizeText("INFO_PARAMFIELD_PARAMVARIER_SEPARATEUR_VIRGULE"),
value: ","
}
];
this.decimalSeparator = this.decimalSeparators[0].value;
}
/** regular expression pattern for values list validation (depends on decimal separator) */
public get valuesListPattern() {
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
const escapedDecimalSeparator = (this.decimalSeparator === "." ? "\\." : this.decimalSeparator);
const numberSubPattern = "-?([0-9]+" + escapedDecimalSeparator + ")?[0-9E]+";
const re = numberSubPattern + "(" + this.separatorPattern + numberSubPattern + ")*";
// console.log("Re PAT", re);
return re;
}
/** accepted separator: everything but [numbers, E, +, -, decimal separator], any length */
public get separatorPattern() {
return "[^0-9-+E" + this.decimalSeparator + "]+";
}
public get selectedValueMode() {
return this.param.valueMode;
}
public set selectedValueMode(v) {
this.param.valueMode = v;
}
public get uiTextModeSelection() {
return this.intlService.localizeText("INFO_PARAMFIELD_PARAMVARIER_MODE");
}
public get uitextValeurMini() {
return this.intlService.localizeText("INFO_PARAMFIELD_VALEURMINI");
}
public get uitextValeurMaxi() {
return this.intlService.localizeText("INFO_PARAMFIELD_VALEURMAXI");
}
public get uitextPasVariation() {
return this.intlService.localizeText("INFO_PARAMFIELD_PASVARIATION");
}
public get uitextClose() {
return this.intlService.localizeText("INFO_OPTION_CLOSE");
}
public get uitextEditParamVariableValues() {
return this.intlService.localizeText("INFO_PARAMFIELD_PARAMVARIER_TITLE");
}
public get uitextListeValeurs() {
return this.intlService.localizeText("INFO_PARAMFIELD_PARAMVARIER_VALUES_FORMAT");
}
public get uitextMustBeANumber(): string {
return this.intlService.localizeText("ERROR_PARAM_MUST_BE_A_NUMBER");
}
public get uitextMustBeListOfNumbers() {
return sprintf(this.intlService.localizeText("INFO_PARAMFIELD_PARAMVARIER_VALUES_FORMAT_ERROR"), this.separatorPattern);
}
public get uitextDecimalSeparator() {
return this.intlService.localizeText("INFO_PARAMFIELD_PARAMVARIER_SEPARATEUR_DECIMAL");
}
public get uitextImportFile() {
return this.intlService.localizeText("INFO_PARAMFIELD_PARAMVARIER_IMPORT_FICHIER");
}
public get isMinMax() {
return this.param.valueMode === ParamValueMode.MINMAX;
}
public get isListe() {
return this.param.valueMode === ParamValueMode.LISTE;
141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
}
public get valuesList() {
return (this.param.valueList || []).join(";");
}
public set valuesList(list: string) {
const vals = [];
list.split(";").forEach((e) => {
if (e.length > 0) {
vals.push(Number(e));
}
});
this.param.valueList = vals;
}
public onFileSelected(event: any) {
if (event.target.files && event.target.files.length) {
const fr = new FileReader();
fr.onload = () => {
console.log("CHARJAY", fr.result);
this.valuesList = String(fr.result);
};
fr.onerror = () => {
fr.abort();
throw new Error("Erreur de lecture du fichier");
};
fr.readAsText(event.target.files[0]);
}
}
public dumperr(obj) {
if (obj) { return Object.keys(obj).join(", "); }
}
public onValueModeChange(event) {
this.initVariableValues();
}
public ngOnInit() {
this.initVariableValues();
}
private initVariableValues() {
// init min / max / step
if (this.isMinMax) {
if (this.param.minValue === undefined) {
this.param.minValue = this.param.getValue() / 2;
}
if (this.param.maxValue === undefined) {
this.param.maxValue = this.param.getValue() * 2;
}
let step = this.param.stepValue;
if (step === undefined) {
step = (this.param.maxValue - this.param.minValue) / 20;
}
this.param.stepValue = step;
}
// init values list
if (this.isListe) {
if (this.param.valueList === undefined) {
if (this.param.isDefined) {
console.log("SET LIST", [ this.param.getValue() ]);
this.param.valueList = [ this.param.getValue() ];
} else {
console.log("SET LIST", [ ]);
this.param.valueList = [];
}
}
}
211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
}
/* protected validateModelValue(v: any): { isValid: boolean, message: string } {
let msg: string;
let valid = false;
if (this.param === undefined) {
msg = "internal error, model undefined";
} else {
if (!this.param.checkMin(v)) {
msg = "La valeur n'est pas dans [" + this.param.domain.minValue + " , " + this.param.maxValue + "[";
} else {
valid = true;
}
}
return { isValid: valid, message: msg };
}
protected validateModelValue(v: any): { isValid: boolean, message: string } {
let msg: string;
let valid = false;
if (this.param === undefined) {
msg = "internal error, model undefined";
} else {
if (!this.param.checkMax(v)) {
msg = "La valeur n'est pas dans ]" + this.param.minValue + " , " + this.param.domain.maxValue + "]";
} else {
valid = true;
}
}
return { isValid: valid, message: msg };
}
protected validateModelValue(v: any): { isValid: boolean, message: string } {
let msg: string;
let valid = false;
if (! this.param) {
msg = "internal error, model undefined";
} else {
if (this.param.isMinMaxValid) {
if (!this.param.checkStep(v)) {
msg = "La valeur n'est pas dans " + this.param.stepRefValue.toString();
} else {
valid = v > 0;
if (!valid) {
msg = "La valeur ne peut pas être <= 0";
}
}
} else {
msg = "Veuillez corriger le min/max";
}
}
return { isValid: valid, message: msg };
} */
}