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. // Actualise l'affichage des données.
// Méthode également appelée par les autres classes. // 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) if(this._fields.length === 0 || this._datasViewElt === undefined)
throw new Error(errors.converterRefreshFail); throw new Error(errors.converterRefreshFail);
@ -241,7 +241,8 @@ export class FreeDatas2HTML
field.field2HTML(); field.field2HTML();
// Tout réaffichage peut entraîner une modification du nombre de pages (évolution filtres, etc.) // 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(); this.pagination.pages2HTML();
} }
} }

View File

@ -132,14 +132,17 @@ export class Pagination implements Paginations
this.pages.displayElement.eltDOM!.innerHTML=selectorsHTML; this.pages.displayElement.eltDOM!.innerHTML=selectorsHTML;
let selectElement=document.getElementById("freeDatas2HTMLPagesSelector") as HTMLInputElement; 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; this.pages.selectedValue=1;
let pagination=this; let pagination=this;
selectElement.addEventListener("change", function(e) selectElement.addEventListener("change", function(e)
{ {
pagination.pages.selectedValue=Number(selectElement.value); 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); 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(); pagination.pages2HTML();
spyOn(converter, "refreshView"); spyOn(converter, "refreshView");
@ -189,10 +189,26 @@ describe("Test de la pagination.", () =>
selectElement.dispatchEvent(new Event('change')); selectElement.dispatchEvent(new Event('change'));
expect(pagination.pages.selectedValue).toEqual(4); expect(pagination.pages.selectedValue).toEqual(4);
expect(converter.refreshView).toHaveBeenCalledTimes(1); expect(converter.refreshView).toHaveBeenCalledTimes(1);
let selectElementAfter=document.getElementById("freeDatas2HTMLPagesSelector") as HTMLInputElement;
expect(selectElementAfter.value).toEqual("4");
selectElement.value="1"; selectElement.value="1";
selectElement.dispatchEvent(new Event('change')); selectElement.dispatchEvent(new Event('change'));
expect(pagination.pages.selectedValue).toEqual(1); expect(pagination.pages.selectedValue).toEqual(1);
expect(converter.refreshView).toHaveBeenCalledTimes(2); 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");
});
}); });
}); });