From 96db98ae4aa91419e26ccb1d59d033397064a289 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabrice=20PENHO=C3=8BT?= Date: Thu, 14 Jul 2022 14:13:24 +0200 Subject: [PATCH] =?UTF-8?q?Bebug=20probl=C3=A8me=20pagination=20perdue=20s?= =?UTF-8?q?uite=20au=20r=C3=A9affichage.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/FreeDatas2HTML.ts | 5 +++-- src/Pagination.ts | 7 +++++-- tests/paginationSpec.ts | 18 +++++++++++++++++- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/FreeDatas2HTML.ts b/src/FreeDatas2HTML.ts index 1cc2647..ef16138 100644 --- a/src/FreeDatas2HTML.ts +++ b/src/FreeDatas2HTML.ts @@ -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(); } } diff --git a/src/Pagination.ts b/src/Pagination.ts index 721c6be..ddeb68f 100644 --- a/src/Pagination.ts +++ b/src/Pagination.ts @@ -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; }); } } diff --git a/tests/paginationSpec.ts b/tests/paginationSpec.ts index 37af67a..dbcf393 100644 --- a/tests/paginationSpec.ts +++ b/tests/paginationSpec.ts @@ -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"); + }); + }); }); \ No newline at end of file