@page "/livres/{Id:int}"
@inject ServiceLivresApi Api
@inject NavigationManager Navigation
MaBibli — fiche du livre
Fiche du livre
@if (_introuvable)
{
Ce livre n'existe pas (ou plus).
Retour au catalogue
}
else if (_saisie is null)
{
Chargement…
}
else
{
@if (_livre is not null)
{
Ajouté le @_livre.DateAjout.ToLocalTime().ToString("dd/MM/yyyy")
@if (!string.IsNullOrWhiteSpace(_livre.AjoutePar))
{
@($" par {_livre.AjoutePar}")
}
@* Information de traçabilité, jamais un filtre : la bibliothèque est commune. *@
}
@if (!_confirmationSuppression)
{
_confirmationSuppression = true">
Supprimer ce livre
}
else
{
Supprimer « @_saisie.Titre » définitivement ? L'historique de ses prêts partira avec.
@(_suppression ? "Suppression…" : "Oui, supprimer")
_confirmationSuppression = false">
Annuler
}
}
@code {
[Parameter] public int Id { get; set; }
private LivreDto? _livre;
private EnregistrementLivre? _saisie;
private bool _introuvable;
private bool _enregistrement;
private bool _suppression;
private bool _confirmationSuppression;
private string? _erreur;
protected override async Task OnParametersSetAsync()
{
_introuvable = false;
_saisie = null;
try
{
_livre = await Api.ObtenirAsync(Id);
}
catch (Exception ex)
{
_erreur = $"Chargement impossible : {ex.Message}";
return;
}
if (_livre is null)
{
_introuvable = true;
return;
}
_saisie = new EnregistrementLivre
{
Isbn = _livre.Isbn,
Titre = _livre.Titre,
Auteur = _livre.Auteur,
Editeur = _livre.Editeur,
Format = _livre.Format,
Statut = _livre.Statut,
CoverUrl = _livre.CoverUrl,
};
}
private async Task EnregistrerAsync()
{
_enregistrement = true;
_erreur = null;
var resultat = await Api.ModifierAsync(Id, _saisie!);
_enregistrement = false;
if (!resultat.EstOk)
{
_erreur = resultat.Erreur;
return;
}
Navigation.NavigateTo("/");
}
private async Task SupprimerAsync()
{
_suppression = true;
var erreur = await Api.SupprimerAsync(Id);
_suppression = false;
if (erreur is not null)
{
_erreur = erreur;
_confirmationSuppression = false;
return;
}
Navigation.NavigateTo("/");
}
private void Retour() => Navigation.NavigateTo("/");
}