Fusionner la phase base de donnees (statut par utilisateur, table Auteur)

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
mathieu
2026-08-18 02:24:09 +02:00
co-authored by Claude Opus 5
38 changed files with 3377 additions and 168 deletions
@@ -0,0 +1,40 @@
@*
Sélecteur du statut de lecture.
Le statut est PERSONNEL (CLAUDE.md) : ce que montrent ces boutons est la lecture de la
personne connectée, pas celle du foyer. « Non commencé » n'est pas une valeur de plus dans
l'énumération, c'est l'absence de ligne en base — d'où le bouton qui remet la valeur à null.
*@
<div class="segments @(Compact ? "segments-compacts" : null)" role="group" aria-label="Statut de lecture">
<button type="button"
class="segment @(Valeur is null ? "segment-actif" : null)"
disabled="@Desactive"
@onclick="() => Choisir(null)">
Non commencé
</button>
@foreach (var statut in Statuts)
{
<button type="button"
class="segment @Libelles.ClasseStatut(statut) @(Valeur == statut ? "segment-actif" : null)"
disabled="@Desactive"
@onclick="() => Choisir(statut)">
@Libelles.Statut(statut)
</button>
}
</div>
@code {
private static readonly Statut[] Statuts = Enum.GetValues<Statut>();
[Parameter] public Statut? Valeur { get; set; }
[Parameter] public EventCallback<Statut?> ValeurChanged { get; set; }
[Parameter] public bool Desactive { get; set; }
[Parameter] public bool Compact { get; set; }
private Task Choisir(Statut? statut) =>
statut == Valeur ? Task.CompletedTask : ValeurChanged.InvokeAsync(statut);
}
+13 -14
View File
@@ -18,10 +18,17 @@
placeholder="Titre du livre" autocomplete="off" />
</label>
@*
Un seul champ, plusieurs auteurs : le point-virgule les sépare. La virgule est déjà
prise par la forme bibliographique « Zola, Émile », qu'on doit pouvoir taper telle quelle.
Le serveur rapproche ensuite les variantes sûres d'un auteur déjà connu.
*@
<label class="champ">
<span class="champ-libelle">Auteur</span>
<span class="champ-libelle">
Auteur<span class="champ-aide"> (plusieurs : séparez par « ; »)</span>
</span>
<input class="champ-saisie" type="text" @bind="Saisie.Auteur" @bind:event="oninput"
placeholder="Prénom Nom" autocomplete="off" />
placeholder="Prénom Nom ; Prénom Nom" autocomplete="off" />
</label>
<label class="champ">
@@ -51,17 +58,10 @@
</fieldset>
<fieldset class="champ">
<legend class="champ-libelle">Statut de lecture</legend>
<div class="segments">
@foreach (var statut in Statuts)
{
<button type="button"
class="segment @(Saisie.Statut == statut ? "segment-actif" : null)"
@onclick="() => Saisie.Statut = statut">
@Libelles.Statut(statut)
</button>
}
</div>
<legend class="champ-libelle">
Statut de lecture<span class="champ-aide"> (le vôtre)</span>
</legend>
<ChoixStatut Valeur="Saisie.Statut" ValeurChanged="s => Saisie.Statut = s" />
</fieldset>
<label class="champ">
@@ -94,7 +94,6 @@
@code {
private static readonly Format[] Formats = Enum.GetValues<Format>();
private static readonly Statut[] Statuts = Enum.GetValues<Statut>();
[Parameter, EditorRequired] public EnregistrementLivre Saisie { get; set; } = new();