Fait saisir un par un ce qui se saisissait sur une ligne à séparateurs
Les thèmes et les auteurs souffraient du défaut corrigé hier sur les unes : un champ relié à chaque frappe sur une propriété qui découpait puis recomposait la liste, donc un séparateur intapable. Ils passent au même geste — écrire, Entrée, puis modifier ou retirer chaque ligne — et le composant est partagé plutôt que recopié une troisième fois. Le bloc des rôles se fond dans la liste des auteurs : il listait les mêmes noms une seconde fois. Renommer une ligne conserve son rôle, parce qu'on corrige un nom au lieu de reconstruire la liste. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -67,10 +67,11 @@ public record EnregistrementLivre
|
||||
/// Vue « une seule ligne » de <see cref="Auteurs"/>, pour les champs de saisie simples.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Non sérialisée : <see cref="Auteurs"/> est la forme de référence sur le fil. Cette
|
||||
/// propriété existe pour que l'interface puisse lier un <c><input></c> unique sans
|
||||
/// avoir à gérer une liste dynamique — un foyer saisit un auteur dans l'immense majorité
|
||||
/// des cas, et les rares livres à quatre auteurs se tapent avec des « ; ».
|
||||
/// ⚠️ <b>Ce n'est plus un champ de saisie</b> : le formulaire remplit la liste un auteur à
|
||||
/// la fois (voir <c>SaisieListe</c>), un champ relié à chaque frappe sur cette propriété
|
||||
/// ayant rendu son propre séparateur intapable. Elle ne sert plus qu'au <b>préremplissage</b>
|
||||
/// depuis une notice, qui donne les auteurs sur une ligne — une seule affectation, jamais
|
||||
/// une par caractère.
|
||||
/// </remarks>
|
||||
[JsonIgnore]
|
||||
public string? Auteur
|
||||
@@ -79,13 +80,6 @@ public record EnregistrementLivre
|
||||
set => Auteurs = Decouper(value, Auteurs);
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public string? ThemesTexte
|
||||
{
|
||||
get => Themes.Count == 0 ? null : ListeSaisie.Joindre(Themes);
|
||||
set => Themes = DecouperThemes(value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Découpe une saisie texte en auteurs, en écartant les entrées vides.
|
||||
/// </summary>
|
||||
@@ -93,10 +87,10 @@ public record EnregistrementLivre
|
||||
/// Auteurs déjà saisis, dont les <b>rôles</b> sont repris quand le nom réapparaît.
|
||||
/// </param>
|
||||
/// <remarks>
|
||||
/// ⚠️ Sans cette reprise, corriger une faute de frappe dans le champ des noms effacerait le
|
||||
/// rôle des auteurs voisins : le champ se relie à chaque frappe, et il reconstruirait la
|
||||
/// liste entière à « non précisé ». Le rapprochement se fait sur la forme normalisée du nom,
|
||||
/// pour survivre à un accent ajouté après coup.
|
||||
/// ⚠️ La reprise des rôles a été écrite pour un champ qui se reconstruisait à chaque frappe.
|
||||
/// Ce champ n'existe plus — le formulaire corrige un nom sans toucher à son rôle
|
||||
/// (<c>NomsAuteurs</c>) — mais elle reste juste, et gratuite, pour un préremplissage qui
|
||||
/// écraserait sinon des rôles déjà posés.
|
||||
/// </remarks>
|
||||
public static List<AuteurSaisi> Decouper(string? saisie, IEnumerable<AuteurSaisi>? connus = null)
|
||||
{
|
||||
@@ -120,9 +114,12 @@ public record EnregistrementLivre
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Découpe la ligne des thèmes. Séparateur : le <b>point-virgule</b>, comme celui des
|
||||
/// auteurs juste au-dessus dans le même formulaire — la virgule reste acceptée, un thème
|
||||
/// n'en contenant jamais.
|
||||
/// Découpe une ligne de thèmes. Séparateur : le <b>point-virgule</b>, la virgule restant
|
||||
/// acceptée — un thème n'en contient jamais.
|
||||
/// <para>
|
||||
/// ⚠️ Plus aucun champ ne s'y lie : les thèmes se saisissent un par un. Cela reste la façon
|
||||
/// de relire une ligne venue d'ailleurs.
|
||||
/// </para>
|
||||
/// </summary>
|
||||
public static List<string> DecouperThemes(string? saisie) =>
|
||||
ListeSaisie.Decouper(saisie);
|
||||
|
||||
Reference in New Issue
Block a user