@page "/livres/{Id:int}" @inject ServiceLivresApi Api @inject NavigationManager Navigation MaBibli — fiche du livre

Fiche du livre

@if (_introuvable) { 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) { } else {

Supprimer « @_saisie.Titre » définitivement ? L'historique de ses prêts partira avec.

}
} @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, // Les auteurs sont repris tels que rattachés au livre. Le statut, lui, est celui de // la personne qui édite : enregistrer ne touche jamais à la lecture de quelqu'un d'autre. Auteurs = _livre.Auteurs.Select(a => a.Nom).ToList(), 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("/"); }