Sépare consultation et édition pour les lots B1 B2 B3

Réutilise la carte livre du catalogue, sépare les modes des séries et des envies, et déplie les œuvres bibliographiques non possédées.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
LIMONIER Mathieu
2026-08-20 13:11:43 +02:00
co-authored by Copilot
parent 5d45eb492e
commit 3d5e73838e
8 changed files with 238 additions and 87 deletions
+39 -3
View File
@@ -140,15 +140,26 @@ else if (_bibliographie is { } biblio)
{
@* La classe « oeuvre-possedee » grise la ligne : le livre est déjà sur l'étagère. *@
<li class="carte-oeuvre @(oeuvre.Possede ? "oeuvre-possedee" : null)" @key="oeuvre.Titre">
@if (oeuvre is { Possede: true, LivreId: { } livreId }
&& _livresCatalogue.FirstOrDefault(l => l.Id == livreId) is { } livre)
{
<CarteLivre Livre="livre" />
}
@if (!oeuvre.Possede || !_livresCatalogue.Any(l => l.Id == oeuvre.LivreId))
{
<div class="carte-corps">
<p class="carte-titre">
@if (oeuvre is { Possede: true, LivreId: { } livreId })
@if (oeuvre is { Possede: true, LivreId: { } livreIdPossede })
{
<a class="lien-auteur" href="@($"livres/{livreId}")">@oeuvre.Titre</a>
<a class="lien-auteur" href="@($"livres/{livreIdPossede}")">@oeuvre.Titre</a>
}
else
{
@oeuvre.Titre
<button type="button" class="carte-titre oeuvre-titre-bouton"
@onclick="() => BasculerOeuvre(oeuvre.Titre)"
aria-expanded="@_oeuvresOuvertes.Contains(oeuvre.Titre)">
@oeuvre.Titre
</button>
}
</p>
@@ -176,6 +187,20 @@ else if (_bibliographie is { } biblio)
}
</p>
</div>
@if (_oeuvresOuvertes.Contains(oeuvre.Titre))
{
<p class="message-discret detail-oeuvre">
@if (!string.IsNullOrWhiteSpace(oeuvre.Isbn))
{
<span>ISBN : @FormatageIsbn.Afficher(oeuvre.Isbn)</span>
}
@if (oeuvre.NombreEditions > 1)
{
<span>@oeuvre.NombreEditions éditions recensées</span>
}
</p>
}
}
@if (oeuvre.ADecouvrir)
{
@@ -225,6 +250,8 @@ else if (_bibliographie is { } biblio)
private string? _message;
private int _possedees;
private IReadOnlyList<LivreDto> _livresCatalogue = [];
private readonly HashSet<string> _oeuvresOuvertes = [];
protected override async Task OnParametersSetAsync() => await ChargerAsync();
@@ -240,6 +267,7 @@ else if (_bibliographie is { } biblio)
try
{
_bibliographie = await Api.ObtenirBibliographieAsync(AuteurId);
_livresCatalogue = await Api.ListerAsync(new CritereLivres());
if (_bibliographie is null)
{
@@ -272,6 +300,14 @@ else if (_bibliographie is { } biblio)
}
}
private void BasculerOeuvre(string titre)
{
if (!_oeuvresOuvertes.Add(titre))
{
_oeuvresOuvertes.Remove(titre);
}
}
/// <summary>
/// Ajoute une œuvre à la liste d'envies, en emportant ce que la BnF en sait.
/// </summary>