Bebug problème pagination perdue suite au réaffichage.

This commit is contained in:
Fabrice PENHOËT 2022-07-14 14:13:24 +02:00
parent 488c357e21
commit 96db98ae4a
3 changed files with 25 additions and 5 deletions

View File

@ -217,7 +217,7 @@ export class FreeDatas2HTML
// Actualise l'affichage des données.
// Méthode également appelée par les autres classes.
public refreshView() : void
public refreshView(paginationSelected=false) : void
{
if(this._fields.length === 0 || this._datasViewElt === undefined)
throw new Error(errors.converterRefreshFail);
@ -241,7 +241,8 @@ export class FreeDatas2HTML
field.field2HTML();
// Tout réaffichage peut entraîner une modification du nombre de pages (évolution filtres, etc.)
if(this.pagination !== undefined)
// Mais ne pas recharger si l'appel vient du choix de la page à afficher
if(this.pagination !== undefined && !paginationSelected)
this.pagination.pages2HTML();
}
}

View File

@ -132,14 +132,17 @@ export class Pagination implements Paginations
this.pages.displayElement.eltDOM!.innerHTML=selectorsHTML;
let selectElement=document.getElementById("freeDatas2HTMLPagesSelector") as HTMLInputElement;
// Réinitialisé, car dans le cas d'un réaffichage, les données et leur nombre peuvent changer.
// Réinitialisé, car dans le cas d'un réaffichage lancé ailleurs, les données et leur nombre peuvent avoir changé.
this.pages.selectedValue=1;
let pagination=this;
selectElement.addEventListener("change", function(e)
{
pagination.pages.selectedValue=Number(selectElement.value);
pagination._converter.refreshView();
pagination._converter.refreshView(true);
// Présélection de la page dont on vient de demander l'affichage :
selectElement.value=""+pagination.pages.selectedValue;
});
}
}

View File

@ -180,7 +180,7 @@ describe("Test de la pagination.", () =>
expect(pagination.pages.selectedValue).toEqual(1);
});
it("La manipulation du sélecteur de pages doit enregistrer la valeur sélectionnée et appeler la fonction actualisant l'affichage.", () =>
it("La manipulation du sélecteur de pages doit enregistrer la valeur sélectionnée et appeler la fonction actualisant l'affichage, tout en gardant la page choisie présélectionnée.", () =>
{
pagination.pages2HTML();
spyOn(converter, "refreshView");
@ -189,10 +189,26 @@ describe("Test de la pagination.", () =>
selectElement.dispatchEvent(new Event('change'));
expect(pagination.pages.selectedValue).toEqual(4);
expect(converter.refreshView).toHaveBeenCalledTimes(1);
let selectElementAfter=document.getElementById("freeDatas2HTMLPagesSelector") as HTMLInputElement;
expect(selectElementAfter.value).toEqual("4");
selectElement.value="1";
selectElement.dispatchEvent(new Event('change'));
expect(pagination.pages.selectedValue).toEqual(1);
expect(converter.refreshView).toHaveBeenCalledTimes(2);
selectElementAfter=document.getElementById("freeDatas2HTMLPagesSelector") as HTMLInputElement;
expect(selectElementAfter.value).toEqual("1");
});
it("Tout actualisation de l'affichage non généré par le choix d'une page, doit supprimer ce choix.", () =>
{
pagination.pages2HTML();
const selectElement=document.getElementById("freeDatas2HTMLPagesSelector") as HTMLInputElement;
selectElement.value="4";
selectElement.dispatchEvent(new Event('change'));
converter.refreshView();
const selectElementAfter=document.getElementById("freeDatas2HTMLPagesSelector") as HTMLInputElement;
expect(selectElementAfter.value).toEqual("1");
});
});
});