Filtre les prêts en cours par nom d'emprunteur (lot G)

Ajoute un champ de recherche insensible aux accents sur l'écran des
prêts en cours, visible dès qu'il y a plus d'un prêt. Filtrage en
mémoire, sans colonne normalisée : la liste est courte par
construction, une forme dédiée en base serait disproportionnée.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
LIMONIER Mathieu
2026-08-20 14:42:23 +02:00
co-authored by Copilot
parent c2d408afc6
commit a0cb727ff0
3 changed files with 52 additions and 6 deletions
+34 -1
View File
@@ -1,4 +1,5 @@
@page "/prets"
@using MaBibli.Shared.Textes
@inject ServiceLivresApi Api
@inject EtatReseau Reseau
@implements IDisposable
@@ -38,8 +39,24 @@ else
{
<p class="compteur">@_prets.Count livre@(_prets.Count > 1 ? "s" : "") dehors</p>
@* Filtre en mémoire : la liste des prêts en cours est courte, une forme normalisée en
base serait disproportionnée pour ce seul besoin (voir IDEES.md, lot G). La recherche
reste insensible aux accents et à la casse, comme partout ailleurs dans l'application. *@
@if (_prets.Count > 1)
{
<div class="barre-recherche">
<input class="champ-saisie" type="search" placeholder="Filtrer par emprunteur…"
value="@_recherche" @oninput="SurRecherche" aria-label="Filtrer par emprunteur" />
</div>
}
@if (PretsAffiches().Count == 0)
{
<p class="message-discret">Aucun prêt ne correspond à « @_recherche ».</p>
}
<ul class="liste-livres">
@foreach (var pret in _prets)
@foreach (var pret in PretsAffiches())
{
<li class="carte-livre" @key="pret.Id">
<Couverture Url="@pret.LivreCoverUrl" Titre="@pret.LivreTitre"
@@ -77,6 +94,22 @@ else
private IReadOnlyList<PretDto>? _prets;
private string? _erreur;
private int? _enCours;
private string _recherche = string.Empty;
private void SurRecherche(ChangeEventArgs e) => _recherche = e.Value?.ToString() ?? string.Empty;
private IReadOnlyList<PretDto> PretsAffiches()
{
if (_prets is null)
{
return [];
}
var terme = NormalisationTexte.Normaliser(_recherche);
return terme.Length == 0
? _prets
: _prets.Where(p => NormalisationTexte.Normaliser(p.Emprunteur).Contains(terme)).ToList();
}
protected override void OnInitialized() => Reseau.Change += SurChangementReseau;