@page "/prets"
@inject ServiceLivresApi Api
@*
Ce qui n'est pas à la maison. C'est l'usage principal des prêts : savoir d'un coup d'œil
quels livres sont dehors, et chez qui.
La liste est commune à tout le foyer, sans filtre par utilisateur : n'importe qui doit
pouvoir constater qu'un livre manque, et noter son retour quand il le récupère.
*@
MaBibli — prêts en cours
Prêts en cours
@if (_erreur is not null)
{
@_erreur
}
@if (_prets is null)
{
Chargement…
}
else if (_prets.Count == 0)
{
Tous les livres sont à la maison.
}
else
{
@_prets.Count livre@(_prets.Count > 1 ? "s" : "") dehors
@foreach (var pret in _prets)
{
@pret.LivreTitre
@if (!string.IsNullOrWhiteSpace(pret.LivreAuteurs))
{
@pret.LivreAuteurs
}
@pret.Emprunteur
depuis le @pret.DatePret.ToLocalTime().ToString("dd/MM/yyyy")
@PretsLivre.Duree(pret.JoursEcoules)
@* Le retour se note ici : on récupère un livre, on ouvre la liste des prêts,
on coche. Passer par la fiche du livre serait un détour. *@
RendreAsync(pret)">
@(_enCours == pret.Id ? "Enregistrement…" : "Rendu")
}
}
Catalogue
@code {
private IReadOnlyList? _prets;
private string? _erreur;
private int? _enCours;
protected override Task OnInitializedAsync() => ChargerAsync();
private async Task ChargerAsync()
{
_erreur = null;
try
{
_prets = await Api.ListerPretsEnCoursAsync();
}
catch (Exception ex)
{
_erreur = $"Impossible de charger les prêts : {ex.Message}";
_prets = [];
}
}
private async Task RendreAsync(PretDto pret)
{
_enCours = pret.Id;
var resultat = await Api.RendreAsync(pret.Id);
_enCours = null;
if (!resultat.EstOk)
{
_erreur = resultat.Erreur;
}
// Rechargement complet plutôt que retrait local : quelqu'un d'autre du foyer a pu rendre
// ou prêter un livre entre-temps, et cette vue est justement celle qu'on garde ouverte.
await ChargerAsync();
}
}