Une seule entrée d'ajout : « Ajouter un ouvrage »
Le geste réel est « j'ai un truc avec un code-barres », pas « je vais cataloguer un livre » : obliger à savoir d'avance ce qu'on tient était un détour, d'autant que le décodage distingue déjà un 978/979 d'un 977. Le même écran est atteint depuis le catalogue et depuis les revues. ⚠️ Le MODÈLE ne bouge pas : une revue reste une Revue, jamais un Livre. Fondre les deux tables aurait obligé à répéter « et qui n'est pas une revue » à chaque lecture du catalogue, des compteurs, des doublons, des séries et des bibliographies. - /ajout (alias /ajout/isbn) : « Ajouter un ouvrage », deux saisies manuelles distinctes puisque, sans code à lire, il faut bien trancher soi-même. - Nouvelle page /revues/ajout : titre, ISSN et éditeur, puis la fiche de la revue. Elle remplace le champ posé au milieu de la liste des revues. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -12,26 +12,6 @@
|
||||
douze fiches. Les revues ne sont pas au catalogue : ce ne sont pas des livres.
|
||||
</p>
|
||||
|
||||
@if (_erreur is not null)
|
||||
{
|
||||
<p class="message-erreur" role="alert">@_erreur</p>
|
||||
}
|
||||
|
||||
<div class="barre-recherche">
|
||||
<input class="champ-saisie" type="text" placeholder="Nom d'une revue…"
|
||||
@bind="_nouvelle" @bind:event="oninput" @onkeydown="SurTouche"
|
||||
aria-label="Nom de la nouvelle revue" autocomplete="off" />
|
||||
</div>
|
||||
|
||||
<div class="actions-formulaire">
|
||||
<button type="button" class="bouton bouton-principal"
|
||||
disabled="@(_enCours || !Reseau.EnLigne || string.IsNullOrWhiteSpace(_nouvelle))"
|
||||
title="@MotifBlocage"
|
||||
@onclick="CreerAsync">
|
||||
Ajouter la revue
|
||||
</button>
|
||||
</div>
|
||||
|
||||
@if (_revues is null)
|
||||
{
|
||||
<p class="message-discret" role="status">Chargement…</p>
|
||||
@@ -39,8 +19,9 @@
|
||||
else if (_revues.Count == 0)
|
||||
{
|
||||
<p class="message-discret">
|
||||
Aucune revue. Scannez le code-barres d'un magazine, ou saisissez son nom ci-dessus :
|
||||
le code d'une revue commence par 977 et porte un ISSN, pas un ISBN.
|
||||
Aucune revue. Scannez le code-barres d'un magazine depuis « Ajouter un ouvrage » :
|
||||
le code d'une revue commence par 977 et porte un ISSN, pas un ISBN. Sans code à lire,
|
||||
<a href="revues/ajout">saisissez-la à la main</a>.
|
||||
</p>
|
||||
}
|
||||
else
|
||||
@@ -80,13 +61,27 @@ else
|
||||
</ul>
|
||||
}
|
||||
|
||||
@*
|
||||
⚠️ Le champ « nom d'une nouvelle revue » a quitté cet écran : l'ajout passe par la MÊME
|
||||
entrée que celle du catalogue, « Ajouter un ouvrage », qui scanne et reconnaît seule un
|
||||
code 977. Deux points de départ selon ce qu'on croit tenir obligeaient à trancher avant
|
||||
de regarder le code-barres.
|
||||
*@
|
||||
<nav class="actions-flottantes">
|
||||
@if (Reseau.EnLigne)
|
||||
{
|
||||
<a class="bouton bouton-principal" href="ajout">Ajouter un ouvrage</a>
|
||||
<a class="bouton bouton-discret" href="revues/ajout">Saisir une revue</a>
|
||||
}
|
||||
else
|
||||
{
|
||||
<button type="button" class="bouton bouton-principal" disabled
|
||||
title="@EtatReseau.MotifHorsLigne">Ajouter un ouvrage</button>
|
||||
}
|
||||
</nav>
|
||||
|
||||
@code {
|
||||
private IReadOnlyList<RevueDto>? _revues;
|
||||
private string _nouvelle = string.Empty;
|
||||
private bool _enCours;
|
||||
private string? _erreur;
|
||||
|
||||
private string? MotifBlocage => Reseau.EnLigne ? null : EtatReseau.MotifHorsLigne;
|
||||
|
||||
private static string Quand(NumeroRevueDto numero) =>
|
||||
numero.DateParution is { } date ? $"({date.ToLocalTime():MM/yyyy})" : string.Empty;
|
||||
@@ -105,30 +100,4 @@ else
|
||||
|
||||
private async Task ChargerAsync() => _revues = await Api.ListerRevuesAsync();
|
||||
|
||||
private async Task SurTouche(KeyboardEventArgs e)
|
||||
{
|
||||
if (e.Key == "Enter" && !string.IsNullOrWhiteSpace(_nouvelle) && Reseau.EnLigne)
|
||||
{
|
||||
await CreerAsync();
|
||||
}
|
||||
}
|
||||
|
||||
private async Task CreerAsync()
|
||||
{
|
||||
_enCours = true;
|
||||
_erreur = null;
|
||||
|
||||
var resultat = await Api.CreerRevueAsync(new EnregistrementRevue { Titre = _nouvelle });
|
||||
|
||||
_enCours = false;
|
||||
|
||||
if (!resultat.EstOk)
|
||||
{
|
||||
_erreur = resultat.Erreur;
|
||||
return;
|
||||
}
|
||||
|
||||
_nouvelle = string.Empty;
|
||||
await ChargerAsync();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user