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",
"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.",
"main": "index.js",
"scripts": {

View File

@ -99,6 +99,11 @@ export class FreeDatas2HTML
return this._nbDatasValid;
}
get fields2Rend() : number[]
{
return this._fields2Rend;
}
// Vérifie qu'un champ existe bien dans les données parsées.
// Utilisée par les autres classes.
public checkFieldExist(nb: number) : boolean
@ -109,6 +114,31 @@ export class FreeDatas2HTML
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.
// ! Ne peut donc être utilisé qu'après avoir parsé les données.
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
public getSortingFunctionForField(datasFieldNb: number): SortingFunctions|undefined
{
@ -176,15 +201,7 @@ export class FreeDatas2HTML
if(this._fields2Rend.length === 0)
this.datasRender.fields=this._fields;
else
{
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;
}
this.datasRender.fields=this.realFields2Rend();
if(this._datasViewElt !== undefined)
this.refreshView();
return true;
@ -283,7 +300,6 @@ export class FreeDatas2HTML
}
datas2Display=newDatas2Display;
}
return datas2Display;
}
}

View File

@ -10,19 +10,20 @@ export class SortingField implements SortingFields
_datasFieldNb: number;
_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")
{
if(converter.fields.length === 0)
throw new Error(errors.sortingFieldNeedDatas);
else if(! converter.checkFieldExist(datasFieldNb))
else if(! converter.checkField2Rend(datasFieldNb))
throw new Error(errors.sortingFieldNotFound);
else
{
const fields=document.querySelectorAll(fieldsDOMSelector);
if(fields === undefined)
throw new Error(errors.sortingFieldsNotInHTML);
else if(fields.length !== converter.fields.length)
else if(fields.length !== converter.realFields2Rend().length)
throw new Error(errors.sortingFieldsNbFail);
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.",
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.",
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.",
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);
});
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, -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);
});
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);
});