@* Les champs d'un numéro de revue, partagés par l'ajout et la modification. Un seul exemplaire, et pas deux blocs jumeaux : le formulaire d'ajout et celui de modification doivent proposer exactement les mêmes champs, sinon une couverture ou une une saisies à la création ne seraient plus modifiables ensuite — ce qui est précisément le cas d'usage (on ajoute un numéro le jour où on l'achète, on en recopie la une plus tard). *@
@* ⚠️ Séparateur : le POINT-VIRGULE, et pas la virgule des thèmes de livres. Un titre d'article en contient souvent (« Ukraine, deux ans après »), et la virgule le couperait en deux. *@ @* ⚠️ Une URL, pas une photo. Aucune source ne donne la couverture d'un NUMÉRO : l'ISSN désigne la revue, pas la parution. Et le projet ne stocke aucun fichier — « ebooks : fiches uniquement » vaut ici aussi. *@ @code { [Parameter, EditorRequired] public AjoutNumeroRevue Saisie { get; set; } = default!; /// /// Date affichée par le champ, en local. /// /// /// ⚠️ Le <input type="date"> produit une date sans fuseau. Elle est déclarée /// locale ici et convertie en UTC, comme toutes les dates du projet : sans cela la parution /// se décale d'un jour pour la moitié du globe. La conversion se fait dans le composant /// pour que les deux écrans qui s'en servent ne puissent pas l'oublier chacun de leur côté. /// private DateTime? Parution { get => Saisie.DateParution?.ToLocalTime().Date; set => Saisie.DateParution = value is { } date ? DateTime.SpecifyKind(date, DateTimeKind.Local).ToUniversalTime() : null; } [Parameter] public EventCallback OnEntree { get; set; } private async Task SurTouche(KeyboardEventArgs e) { if (e.Key == "Enter") { await OnEntree.InvokeAsync(e); } } }