Skip to content
Snippets Groups Projects
Commit d13d0ab9 authored by Mathias Chouet's avatar Mathias Chouet
Browse files

Verificateur: made Species List a CustomSelect

parent ead17193
No related branches found
No related tags found
No related merge requests found
......@@ -21,9 +21,8 @@
"type": "fieldset",
"fields": [
{
"type": "select",
"type": "select_custom",
"id": "select_species_list",
"property": "speciesList",
"source": "verificateur_species",
"multiple": true
}
......@@ -31,8 +30,8 @@
},
{
"type": "options",
"selectIds": [ "select_pab_jet_type", "select_species_list" ],
"customSelectIds": [ "select_target_pass" ],
"selectIds": [ "select_pab_jet_type" ],
"customSelectIds": [ "select_target_pass", "select_species_list" ],
"help": "verification/verificateur.html"
}
]
......@@ -28,27 +28,15 @@ export class FormulaireVerificateur extends FormulaireFixedVar {
console.log("> update", data, sender.constructor.name);
if (sender instanceof SelectFieldCustom) {
if (data.action === "select") {
if (sender.id === "select_target_pass" && data.action === "select") {
// update Verificateur property: Pass to check
let v = undefined;
if (data && data.value && data.value.value) {
v = data.value.value;
}
this._currentNub.properties.setPropValue("nubToVerify", data.value);
// @TODO refresh jet type selector
} else if (sender.id === "select_species_list" && data.action === "select") {
// update Verificateur property: Species list (string[])
this._currentNub.properties.setPropValue("speciesList", data.value.map((v: any) => v.value));
}
}
}
public onCalculatorInit() {
// refresh species list selector on each display, because Session might have gained new Espece nubs
console.log(">>>> speciesList avant rafraîchissement :", (this.currentNub as Verificateur).speciesList);
/* const pSel = this.getFormulaireNodeById(this._speciesListSelectId) as SelectField;
if (pSel) {
pSel.clearEntries();
pSel.parseConfig();
// (pSel.parent as FieldSet).updateFields()
} */
}
}
import { SelectEntry } from "./select-entry";
import { ServiceFactory } from "../../services/service-factory";
import { SelectField } from './select-field';
import { decodeHtml, arraysAreEqual } from "../../util";
import { Session, Solveur, FishPass, CalculatorType, Verificateur, Nub } from "jalhyd";
import { SelectField } from './select-field';
import { FishSpecies, Session, Solveur, FishPass, CalculatorType, Verificateur, Nub } from "jalhyd";
import { sprintf } from 'sprintf-js';
/**
* A select field that populates itself with custom stuff (ex: references to Nubs, Parameters…)
......@@ -38,6 +40,13 @@ export class SelectFieldCustom extends SelectField {
this.setValueFromId(this._entriesBaseId + ntv.uid);
}
break;
case "verificateur_species": // Vérificateur, liste d'espèces (choix multiple)
const sl = (nub as Verificateur).speciesList;
if (sl !== undefined) {
this.setValueFromId(sl.map((s) => this._entriesBaseId + s ));
}
break;
}
}
......@@ -112,6 +121,27 @@ export class SelectFieldCustom extends SelectField {
}
break;
case "verificateur_species":
console.log("[i] loading verif species");
// add UIDs of all Espece type Nubs in the session
const especeNubs = Session.getInstance().getAllNubs().filter((element) => element.calcType === CalculatorType.Espece);
for (const en of especeNubs) {
this.addEntry(
new SelectEntry(
en.uid,
en.uid,
sprintf(
ServiceFactory.instance.i18nService.localizeText("INFO_VERIFICATEUR_CUSTOM_SPECIES"),
ServiceFactory.instance.formulaireService.getFormulaireFromNubId(en.uid).calculatorName
)
)
);
}
// add all FishSpecies
for (let j = 0; j < Object.keys(FishSpecies).length / 2; j++) {
this.addEntry(new SelectEntry(this._entriesBaseId + j, String(j), "Groupe d'espèces " + j));
}
break;
}
}
......@@ -157,9 +187,15 @@ export class SelectFieldCustom extends SelectField {
super.setValue(undefined);
}
} else {
// keep previously selected entry if possible @TODO manage multiple values
if (pse && ! Array.isArray(pse) && pse.id) {
this.setValueFromId(pse.id);
// keep previously selected entry(ies) if possible
if (pse) {
if (! Array.isArray(pse) && pse.id) {
this.setValueFromId(pse.id);
} else if (Array.isArray(pse) && pse.length > 0) {
this.setValueFromId(pse.map((e) => e.id ));
} else {
this.setDefaultValue();
}
} else {
this.setDefaultValue();
}
......@@ -172,6 +208,10 @@ export class SelectFieldCustom extends SelectField {
*/
public setValue(v: SelectEntry | SelectEntry[]) {
const previousSelectedEntry = this._selectedEntry;
/* if (Array.isArray(v)) {
// keep selection ordered
v.sort((a,b) => (a.value > b.value) ? -1 : ((b.value > a.value) ? 1 : 0));
} */
this._selectedEntry = v;
// if value changed
let valueChanged = (
......@@ -184,7 +224,7 @@ export class SelectFieldCustom extends SelectField {
|| (
Array.isArray(previousSelectedEntry)
&& Array.isArray(v)
&& arraysAreEqual(previousSelectedEntry, v, "id", true)
&& ! arraysAreEqual(previousSelectedEntry, v, "id", true)
)
);
if (valueChanged) {
......@@ -193,17 +233,24 @@ export class SelectFieldCustom extends SelectField {
}
/**
* Sets value from given ID; if it was not found, sets the
* Sets value from given ID(s); if it was not found, sets the
* first available entry as selectedValue
*/
public setValueFromId(id: string) {
public setValueFromId(id: string | string[]) {
let found = false;
for (const e of this._entries) {
if (e.id === id) {
found = true;
if (this._multiple) {
this.setValue([ e ]);
} else {
let entries = [];
if (this._multiple && Array.isArray(id)) {
for (const e of this._entries) {
if (id.includes(e.id)) {
entries.push(e);
found = true;
}
}
this.setValue(entries);
} else {
for (const e of this._entries) {
if (e.id === id) {
found = true;
this.setValue(e);
}
}
......
......@@ -5,8 +5,7 @@ import {
StructureType,
LoiDebit,
Session,
Solveur,
CalculatorType
Solveur
} from "jalhyd";
import { Field } from "./field";
......@@ -15,8 +14,6 @@ import { StringMap } from "../../stringmap";
import { FormulaireNode } from "./formulaire-node";
import { FormulaireDefinition } from "../definition/form-definition";
import { ServiceFactory } from "../../services/service-factory";
import { FishSpecies } from 'jalhyd/build/verification/fish_species';
import { sprintf } from 'sprintf-js';
export class SelectField extends Field {
......@@ -200,29 +197,6 @@ export class SelectField extends Field {
}
break;
// possible values depend on Session @TODO does not work, because not refreshed when Session gets new Espece nubs
case "verificateur_species":
console.log("[i] loading verif species");
// add UIDs of all Espece type Nubs in the session
const especeNubs = Session.getInstance().getAllNubs().filter((element) => element.calcType === CalculatorType.Espece);
for (const en of especeNubs) {
this.addEntry(
new SelectEntry(
en.uid,
en.uid,
sprintf(
ServiceFactory.instance.i18nService.localizeText("INFO_VERIFICATEUR_CUSTOM_SPECIES"),
ServiceFactory.instance.formulaireService.getFormulaireFromNubId(en.uid).calculatorName
)
)
);
}
// add all FishSpecies
for (let j = 0; j < Object.keys(FishSpecies).length / 2; j++) {
this.addEntry(new SelectEntry(this._entriesBaseId + j, j, "Groupe d'espèces " + j));
}
break;
// general case : property values taken from an enum
default:
// find enum associated to property
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment