Ajoute ISBN, tris et nouveautés d'auteur
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
co-authored by
Copilot
parent
359f4f59c6
commit
6b8f08ef26
@@ -98,6 +98,16 @@
|
||||
Choisissez celle qui correspond, ou complétez à la main.
|
||||
</p>
|
||||
|
||||
<div class="champ champ-tri">
|
||||
<label class="champ-libelle" for="tri-resultats">Trier par</label>
|
||||
<select id="tri-resultats" class="champ-saisie" value="@_tri"
|
||||
@onchange="e => ChangerTri(e.Value?.ToString())">
|
||||
<option value="@TriResultats.Date">Date (récent en premier)</option>
|
||||
<option value="@TriResultats.Titre">Titre</option>
|
||||
<option value="@TriResultats.Editeur">Éditeur</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<ul class="liste-candidats">
|
||||
@foreach (var (candidat, index) in _candidats.Select((c, i) => (c, i)))
|
||||
{
|
||||
@@ -183,6 +193,7 @@
|
||||
private EnregistrementSouhait _saisie = new();
|
||||
private IReadOnlyList<CandidatLivre> _candidats = [];
|
||||
private IReadOnlyList<string> _avertissements = [];
|
||||
private TriResultats _tri = TriResultats.Date;
|
||||
private bool _recherche;
|
||||
private bool _ajout;
|
||||
private string? _erreur;
|
||||
@@ -195,6 +206,13 @@
|
||||
|
||||
private string? MotifBlocage => Reseau.EnLigne ? null : EtatReseau.MotifHorsLigne;
|
||||
|
||||
private enum TriResultats
|
||||
{
|
||||
Date,
|
||||
Titre,
|
||||
Editeur,
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Focalise le premier champ à l'ouverture et à chaque changement de mode.
|
||||
/// </summary>
|
||||
@@ -228,6 +246,7 @@
|
||||
_erreur = null;
|
||||
_candidats = [];
|
||||
_avertissements = [];
|
||||
_tri = TriResultats.Date;
|
||||
}
|
||||
|
||||
private async Task SurTouche(KeyboardEventArgs e)
|
||||
@@ -284,6 +303,7 @@
|
||||
}
|
||||
|
||||
_candidats = resultat.Candidats;
|
||||
_candidats = Trier(_candidats);
|
||||
|
||||
if (_candidats.Count == 0)
|
||||
{
|
||||
@@ -296,6 +316,52 @@
|
||||
}
|
||||
}
|
||||
|
||||
private void ChangerTri(string? valeur)
|
||||
{
|
||||
if (!Enum.TryParse<TriResultats>(valeur, out var tri))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_tri = tri;
|
||||
_candidats = Trier(_candidats);
|
||||
}
|
||||
|
||||
private IReadOnlyList<CandidatLivre> Trier(IEnumerable<CandidatLivre> candidats) =>
|
||||
_tri switch
|
||||
{
|
||||
TriResultats.Titre => candidats
|
||||
.OrderBy(c => c.Titre, StringComparer.CurrentCultureIgnoreCase)
|
||||
.ThenBy(c => c.Editeur, StringComparer.CurrentCultureIgnoreCase)
|
||||
.ToList(),
|
||||
TriResultats.Editeur => candidats
|
||||
.OrderBy(c => c.Editeur ?? string.Empty, StringComparer.CurrentCultureIgnoreCase)
|
||||
.ThenBy(c => c.Titre, StringComparer.CurrentCultureIgnoreCase)
|
||||
.ToList(),
|
||||
_ => candidats
|
||||
.OrderByDescending(c => AnneeTriable(c.Annee))
|
||||
.ThenBy(c => c.Titre, StringComparer.CurrentCultureIgnoreCase)
|
||||
.ToList(),
|
||||
};
|
||||
|
||||
private static int AnneeTriable(string? date)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(date))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
for (var i = 0; i + 4 <= date.Length; i++)
|
||||
{
|
||||
if (int.TryParse(date.AsSpan(i, 4), out var annee) && annee is >= 1000 and <= 2999)
|
||||
{
|
||||
return annee;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Enregistre le candidat choisi, <b>couverture comprise</b>.
|
||||
/// </summary>
|
||||
|
||||
Reference in New Issue
Block a user