@page "/ajout/manuel" @inject ServiceLivresApi Api @inject NavigationManager Navigation @inject EtatReseau Reseau @implements IDisposable MaBibli — saisie manuelle

Saisie manuelle

Pour les livres sans ISBN, ou dont aucune notice ne convient. L'ISBN reste facultatif.

@* Le formulaire s'efface pendant qu'on tranche le doublon : la saisie n'est pas perdue pour autant, elle attend dans « _saisie » et revient telle quelle si l'on renonce. Laisser les deux à l'écran donnerait deux boutons d'ajout, dont un seul confirme. *@ @if (_doublons is { } doublons) { } else { } @code { private readonly EnregistrementLivre _saisie = new(); /// /// ISBN transmis par un autre écran — un résidu de rafale qu'aucune source ne connaît. /// /// /// ⚠️ Sans cette reprise, le lien du compte rendu de rafale menait à un formulaire /// vide : il fallait retaper le code qu'on venait de scanner, c'est-à-dire refaire /// exactement ce que la rafale existe pour éviter. Le lien compilait et ne servait à rien. /// [SupplyParameterFromQuery(Name = "isbn")] public string? IsbnPropose { get; set; } protected override void OnInitialized() { Reseau.Change += SurChangementReseau; if (!string.IsNullOrWhiteSpace(IsbnPropose)) { _saisie.Isbn = IsbnPropose.Trim(); } } private void SurChangementReseau() => _ = InvokeAsync(StateHasChanged); public void Dispose() => Reseau.Change -= SurChangementReseau; private bool _enregistrement; private string? _erreur; private DoublonsLivre? _doublons; private Task EnregistrerAsync() => AjouterAsync(false); /// Ajout maintenu après avoir vu ce que le catalogue contenait déjà. private Task ConfirmerAsync() => AjouterAsync(true); private async Task AjouterAsync(bool confirmerDoublon) { _enregistrement = true; _erreur = null; var resultat = await Api.CreerAsync(_saisie, confirmerDoublon); _enregistrement = false; // Un doublon signalé n'est pas un échec : rien n'a été écrit, et la même saisie // confirmée s'enregistrera telle quelle. if (resultat.Doublons is { } doublons) { _doublons = doublons; return; } _doublons = null; if (!resultat.EstOk) { _erreur = resultat.Erreur; return; } Navigation.NavigateTo("/"); } private void Retour() => Navigation.NavigateTo("/"); }