Relecture code des Selector, avant évolutions.
This commit is contained in:
parent
b2507594db
commit
6532c04ca1
@ -13,8 +13,8 @@ export class Selector implements Selectors
|
|||||||
private _values: string[]=[];
|
private _values: string[]=[];
|
||||||
private _name: string="";
|
private _name: string="";
|
||||||
|
|
||||||
// Injection de la classe principale, mais uniquement si des données ont été importées
|
// Injection de la classe principale, mais uniquement si des données ont été importées.
|
||||||
// Le champ duquel le sélecteur tire ses données doit exister ?
|
// Le champ duquel le sélecteur tire ses données doit exister.
|
||||||
constructor(converter: FreeDatas2HTML, datasFieldNb: number, elt: DOMElement, separator?: string)
|
constructor(converter: FreeDatas2HTML, datasFieldNb: number, elt: DOMElement, separator?: string)
|
||||||
{
|
{
|
||||||
if(converter.fields.length === 0 || converter.datas.length === 0)
|
if(converter.fields.length === 0 || converter.datas.length === 0)
|
||||||
@ -70,13 +70,13 @@ export class Selector implements Selectors
|
|||||||
// Création du <select> dans le DOM correspondant au filtre
|
// Création du <select> dans le DOM correspondant au filtre
|
||||||
public filter2HTML(label:string="") : void
|
public filter2HTML(label:string="") : void
|
||||||
{
|
{
|
||||||
this._name=this._converter.fields![this._datasFieldNb]; // "!" car l'existence du champ est testé par le constructeur
|
this._name=this._converter.fields![this._datasFieldNb]; // "!", car l'existence du champ est testé par le constructeur.
|
||||||
for (let row of this._converter.datas)
|
for (let row of this._converter.datas)
|
||||||
{
|
{
|
||||||
let checkedValue;
|
let checkedValue;
|
||||||
if(this._separator === undefined)
|
if(this._separator === undefined)
|
||||||
{
|
{
|
||||||
checkedValue=row[this._name].trim(); // trim() évite des problèmes de classement des éléments du SELECT
|
checkedValue=row[this._name].trim(); // trim() évite des problèmes de classement des éléments du SELECT.
|
||||||
if(checkedValue !== "" && this._values.indexOf(checkedValue) === -1)
|
if(checkedValue !== "" && this._values.indexOf(checkedValue) === -1)
|
||||||
this._values.push(checkedValue);
|
this._values.push(checkedValue);
|
||||||
}
|
}
|
||||||
@ -92,7 +92,7 @@ export class Selector implements Selectors
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(this._values.length === 0) // possible si uniquement des valeurs vides pour ce champ
|
if(this._values.length === 0) // possible, si uniquement des valeurs vides pour ce champ.
|
||||||
throw new Error(errors.selectorFieldIsEmpty);
|
throw new Error(errors.selectorFieldIsEmpty);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -102,14 +102,15 @@ export class Selector implements Selectors
|
|||||||
else
|
else
|
||||||
this._values.sort(compare());
|
this._values.sort(compare());
|
||||||
|
|
||||||
// Création et injection du SELECT dans le DOM
|
// Création et injection du SELECT dans le DOM :
|
||||||
label=(label === "") ? this._name : label;
|
label=(label === "") ? this._name : label;
|
||||||
let selectorsHTML="<label for='freeDatas2HTML_"+this._datasViewElt.id+"'>"+label+" :</label><select name='freeDatas2HTML_"+this._datasViewElt.id+"' id='freeDatas2HTML_"+this._datasViewElt.id+"'><option value='0'>----</option>"; // l'option zéro permet d'actualiser l'affichage en ignorant ce filtre
|
let selectorsHTML="<label for='freeDatas2HTML_"+this._datasViewElt.id+"'>"+label+" :</label><select name='freeDatas2HTML_"+this._datasViewElt.id+"' id='freeDatas2HTML_"+this._datasViewElt.id+"'><option value='0'>----</option>"; // l'option zéro permet d'actualiser l'affichage en ignorant ce filtre.
|
||||||
for(let i=0; i< this._values.length; i++)
|
for(let i=0; i< this._values.length; i++)
|
||||||
selectorsHTML+="<option value='"+(i+1)+"'>"+this._values[i]+"</option>";
|
selectorsHTML+="<option value='"+(i+1)+"'>"+this._values[i]+"</option>";
|
||||||
selectorsHTML+="</select>";
|
selectorsHTML+="</select>";
|
||||||
this. _datasViewElt.eltDOM!.innerHTML=selectorsHTML;// "!" car l'existence de "eltDOM" est testé par le constructeur
|
this. _datasViewElt.eltDOM!.innerHTML=selectorsHTML;// "!", car l'existence de "eltDOM" est testé par le constructeur.
|
||||||
|
|
||||||
|
// Actualisation de l'affichage lorsqu'une valeur est sélectionnée :
|
||||||
const selectElement=document.getElementById("freeDatas2HTML_"+this._datasViewElt.id) as HTMLInputElement, mySelector=this;
|
const selectElement=document.getElementById("freeDatas2HTML_"+this._datasViewElt.id) as HTMLInputElement, mySelector=this;
|
||||||
selectElement.addEventListener("change", function(e)
|
selectElement.addEventListener("change", function(e)
|
||||||
{
|
{
|
||||||
|
@ -29,7 +29,7 @@ describe("Test des sélecteurs de données", () =>
|
|||||||
// Convertisseur non lancé :
|
// Convertisseur non lancé :
|
||||||
converter=new FreeDatas2HTML("CSV");
|
converter=new FreeDatas2HTML("CSV");
|
||||||
expect(() => { return new Selector(converter, 0, { id:"selector1" }); }).toThrowError(errors.filterNeedDatas);
|
expect(() => { return new Selector(converter, 0, { id:"selector1" }); }).toThrowError(errors.filterNeedDatas);
|
||||||
// Note : les parseurs vont générer une erreur en amont s'ils ne trouvent pas de noms de champs.
|
// Note : les parseurs vont générer une erreur en amont s'ils ne trouvent pas de noms de champs
|
||||||
// Par contre, ils acceptent de ne pas trouver de données :
|
// Par contre, ils acceptent de ne pas trouver de données :
|
||||||
converter.parser.datas2Parse="Z (numéro atomique),Élément,Symbole,Famille,Abondance des éléments dans la croûte terrestre (μg/k)";
|
converter.parser.datas2Parse="Z (numéro atomique),Élément,Symbole,Famille,Abondance des éléments dans la croûte terrestre (μg/k)";
|
||||||
await converter.run();
|
await converter.run();
|
||||||
@ -49,7 +49,7 @@ describe("Test des sélecteurs de données", () =>
|
|||||||
expect(selector.separator).toBeUndefined();
|
expect(selector.separator).toBeUndefined();
|
||||||
});
|
});
|
||||||
|
|
||||||
it("Si toutes les paramètres sont correctes, ils doivent être acceptés.", () =>
|
it("Si toutes les paramètres sont valides, ils doivent être acceptés.", () =>
|
||||||
{
|
{
|
||||||
expect(() => { selector=new Selector(converter, 2, { id:"selector1" }, ","); return true; }).not.toThrowError();
|
expect(() => { selector=new Selector(converter, 2, { id:"selector1" }, ","); return true; }).not.toThrowError();
|
||||||
expect(selector.datasFieldNb).toEqual(2);
|
expect(selector.datasFieldNb).toEqual(2);
|
||||||
@ -198,7 +198,7 @@ describe("Test des sélecteurs de données", () =>
|
|||||||
expect(selector.dataIsOk({ "Famille": "Hallo Eugène !" })).toBeFalse();
|
expect(selector.dataIsOk({ "Famille": "Hallo Eugène !" })).toBeFalse();
|
||||||
});
|
});
|
||||||
|
|
||||||
it("Doit retourner true, si une donnée testée correspond pas à la valeur sélectionnée pour ce filtre.", () =>
|
it("Doit retourner true, si une donnée testée correspond à la valeur sélectionnée pour ce filtre.", () =>
|
||||||
{
|
{
|
||||||
selectElement.value="4";
|
selectElement.value="4";
|
||||||
selectElement.dispatchEvent(new Event('change'));
|
selectElement.dispatchEvent(new Event('change'));
|
||||||
@ -238,11 +238,11 @@ describe("Test des sélecteurs de données", () =>
|
|||||||
selectElement.value="4";
|
selectElement.value="4";
|
||||||
selectElement.dispatchEvent(new Event('change'));
|
selectElement.dispatchEvent(new Event('change'));
|
||||||
expect(selector.dataIsOk({ "Étiquettes": "Exemple3" })).toBeTrue();
|
expect(selector.dataIsOk({ "Étiquettes": "Exemple3" })).toBeTrue();
|
||||||
// Même pas seule :
|
// Même quand elle n'est pas seule :
|
||||||
expect(selector.dataIsOk({ "Étiquettes": "Exemple3|Exemple1|Exemple9" })).toBeTrue();
|
expect(selector.dataIsOk({ "Étiquettes": "Exemple3|Exemple1|Exemple9" })).toBeTrue();
|
||||||
expect(selector.dataIsOk({ "Étiquettes": "Exemple0|Exemple3|Exemple2" })).toBeTrue();
|
expect(selector.dataIsOk({ "Étiquettes": "Exemple0|Exemple3|Exemple2" })).toBeTrue();
|
||||||
expect(selector.dataIsOk({ "Étiquettes": "Exemple0|Exemple4|Exemple3" })).toBeTrue();
|
expect(selector.dataIsOk({ "Étiquettes": "Exemple0|Exemple4|Exemple3" })).toBeTrue();
|
||||||
// Y compris si entourée d'espaces :
|
// Ou entourée d'espaces :
|
||||||
expect(selector.dataIsOk({ "Étiquettes": "Exemple0|Exemple4| Exemple3 " })).toBeTrue();
|
expect(selector.dataIsOk({ "Étiquettes": "Exemple0|Exemple4| Exemple3 " })).toBeTrue();
|
||||||
expect(selector.dataIsOk({ "Étiquettes": " Exemple3 " })).toBeTrue();
|
expect(selector.dataIsOk({ "Étiquettes": " Exemple3 " })).toBeTrue();
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user