Adaptations pour que les champs de classement prennent en compte le fait que tous les champs parsés ne sont pas forcément affichés.

This commit is contained in:
Fabrice PENHOËT 2021-10-27 16:51:14 +02:00
parent 3ea65db323
commit 27564f2d2b
5 changed files with 39 additions and 22 deletions

View File

@ -1,6 +1,6 @@
{ {
"name": "freedatas2html", "name": "freedatas2html",
"version": "0.9.6", "version": "0.9.7",
"description": "Conversion and display of data in different formats (CSV, JSON, HTML) with the possibility of filtering, classifying and paginating the results.", "description": "Conversion and display of data in different formats (CSV, JSON, HTML) with the possibility of filtering, classifying and paginating the results.",
"main": "index.js", "main": "index.js",
"scripts": { "scripts": {

View File

@ -99,6 +99,11 @@ export class FreeDatas2HTML
return this._nbDatasValid; return this._nbDatasValid;
} }
get fields2Rend() : number[]
{
return this._fields2Rend;
}
// Vérifie qu'un champ existe bien dans les données parsées. // Vérifie qu'un champ existe bien dans les données parsées.
// Utilisée par les autres classes. // Utilisée par les autres classes.
public checkFieldExist(nb: number) : boolean public checkFieldExist(nb: number) : boolean
@ -109,6 +114,31 @@ export class FreeDatas2HTML
return true; return true;
} }
public realFields2Rend() : string[]
{
if(this._fields2Rend.length === 0)
return this._fields;
else
{
const realFields=[];
for(let i=0; i < this._fields.length; i++)
{
if(this._fields2Rend.indexOf(i) !== -1)
realFields.push(this._fields[i]);
}
return realFields;
}
}
// Vérifie qu'un champ faire partie de ceux à afficher.
public checkField2Rend(nb: number) : boolean
{
if(this.realFields2Rend()[nb] === undefined)
return false;
else
return true;
}
// Vérifie que les numéros de champs pour lesquels il y a des fonctions de classement spécifiques sont cohérents. // Vérifie que les numéros de champs pour lesquels il y a des fonctions de classement spécifiques sont cohérents.
// ! Ne peut donc être utilisé qu'après avoir parsé les données. // ! Ne peut donc être utilisé qu'après avoir parsé les données.
set datasSortingFunctions(SortingFunctions: SortingFunctions[]) set datasSortingFunctions(SortingFunctions: SortingFunctions[])
@ -141,11 +171,6 @@ export class FreeDatas2HTML
} }
} }
get fields2Rend() : number[]
{
return this._fields2Rend;
}
// Retourne l'éventuelle fonction spécifique de classement associée à un champ // Retourne l'éventuelle fonction spécifique de classement associée à un champ
public getSortingFunctionForField(datasFieldNb: number): SortingFunctions|undefined public getSortingFunctionForField(datasFieldNb: number): SortingFunctions|undefined
{ {
@ -176,15 +201,7 @@ export class FreeDatas2HTML
if(this._fields2Rend.length === 0) if(this._fields2Rend.length === 0)
this.datasRender.fields=this._fields; this.datasRender.fields=this._fields;
else else
{ this.datasRender.fields=this.realFields2Rend();
const fields2Rend: string[]=[];
for(let i=0; i< this._fields.length; i++)
{
if(this._fields2Rend.indexOf(i) !== -1)
fields2Rend.push(this._fields[i]);
}
this.datasRender.fields=fields2Rend;
}
if(this._datasViewElt !== undefined) if(this._datasViewElt !== undefined)
this.refreshView(); this.refreshView();
return true; return true;
@ -283,7 +300,6 @@ export class FreeDatas2HTML
} }
datas2Display=newDatas2Display; datas2Display=newDatas2Display;
} }
return datas2Display; return datas2Display;
} }
} }

View File

@ -10,19 +10,20 @@ export class SortingField implements SortingFields
_datasFieldNb: number; _datasFieldNb: number;
_order: "asc"|"desc"|undefined=undefined; _order: "asc"|"desc"|undefined=undefined;
// Injection de la classe principale, mais uniquement si les noms des champs ont été importés et affichés correctement // Injection de la classe principale, mais uniquement si les noms des champs ont été importés et affichés correctement.
// Attention le numéro de champ concerne les champs effectivement affichés et non ceux issus du parseur.
constructor(converter: FreeDatas2HTML, datasFieldNb: number, fieldsDOMSelector: string="th") constructor(converter: FreeDatas2HTML, datasFieldNb: number, fieldsDOMSelector: string="th")
{ {
if(converter.fields.length === 0) if(converter.fields.length === 0)
throw new Error(errors.sortingFieldNeedDatas); throw new Error(errors.sortingFieldNeedDatas);
else if(! converter.checkFieldExist(datasFieldNb)) else if(! converter.checkField2Rend(datasFieldNb))
throw new Error(errors.sortingFieldNotFound); throw new Error(errors.sortingFieldNotFound);
else else
{ {
const fields=document.querySelectorAll(fieldsDOMSelector); const fields=document.querySelectorAll(fieldsDOMSelector);
if(fields === undefined) if(fields === undefined)
throw new Error(errors.sortingFieldsNotInHTML); throw new Error(errors.sortingFieldsNotInHTML);
else if(fields.length !== converter.fields.length) else if(fields.length !== converter.realFields2Rend().length)
throw new Error(errors.sortingFieldsNbFail); throw new Error(errors.sortingFieldsNbFail);
else else
{ {

View File

@ -34,7 +34,7 @@ module.exports =
selectorFieldNotFound: "Au moins un des champs devant servir à filtrer les données n'existe pas dans le fichier.", selectorFieldNotFound: "Au moins un des champs devant servir à filtrer les données n'existe pas dans le fichier.",
selectorSelectedIndexNotFound: "La valeur sélectionnée n'a pas été trouvée dans la liste des champs.", selectorSelectedIndexNotFound: "La valeur sélectionnée n'a pas été trouvée dans la liste des champs.",
sortingFieldNeedDatas: "La création d'un champ de classement nécessite la transmission de la liste des champs.", sortingFieldNeedDatas: "La création d'un champ de classement nécessite la transmission de la liste des champs.",
sortingFieldNotFound: "Au moins un des champs devant permettre de classer les données n'existe pas dans le fichier.", sortingFieldNotFound: "Au moins un des champs devant permettre de classer les données n'existe pas dans ceux à afficher.",
sortingFieldsNbFail: "Le nombre de champs trouvés dans le DOM ne correspond pas à celui des données à classer.", sortingFieldsNbFail: "Le nombre de champs trouvés dans le DOM ne correspond pas à celui des données à classer.",
sortingFieldsNotInHTML: "Les champs pouvant servir à classer les données n'ont pas été trouvés dans le DOM.", sortingFieldsNotInHTML: "Les champs pouvant servir à classer les données n'ont pas été trouvés dans le DOM.",
}; };

View File

@ -31,7 +31,7 @@ describe("Test des champs de classement.", () =>
expect(() => { return new SortingField(converter, 0); }).toThrowError(errors.sortingFieldNeedDatas); expect(() => { return new SortingField(converter, 0); }).toThrowError(errors.sortingFieldNeedDatas);
}); });
it("Doit générer une erreur, si initialisé avec un numéro du champ de classement n'existant pas dans les données.", () => it("Doit générer une erreur, si initialisé avec un numéro du champ de classement n'existant dans ceux à afficher.", () =>
{ {
expect(() => { return new SortingField(converter, 9); }).toThrowError(errors.sortingFieldNotFound); expect(() => { return new SortingField(converter, 9); }).toThrowError(errors.sortingFieldNotFound);
expect(() => { return new SortingField(converter, -1); }).toThrowError(errors.sortingFieldNotFound); expect(() => { return new SortingField(converter, -1); }).toThrowError(errors.sortingFieldNotFound);
@ -43,7 +43,7 @@ describe("Test des champs de classement.", () =>
expect(() => { return new SortingField(converter, 0, "th.cols"); }).toThrowError(errors.sortingsFieldNotInHTML); expect(() => { return new SortingField(converter, 0, "th.cols"); }).toThrowError(errors.sortingsFieldNotInHTML);
}); });
it("Doit générer une erreur, si le nombre d'éléments trouvés dans le DOM pour les entêtes est différent du nombre de champs des données.", () => it("Doit générer une erreur, si le nombre d'éléments trouvés dans le DOM pour les entêtes est différent du nombre de champs à afficher.", () =>
{ {
expect(() => { return new SortingField(converter, 0, "td"); }).toThrowError(errors.sortingFieldsNbFail); expect(() => { return new SortingField(converter, 0, "td"); }).toThrowError(errors.sortingFieldsNbFail);
}); });