@using MaBibli.Client.Services @* Un bloc de série au catalogue, replié ou déplié — et récursif, parce qu'un cycle est une série de séries : chaque niveau porte sa propre bascule. ⚠️ Tout est DÉPLIÉ par défaut, et l'on replie ce dont on ne veut pas. C'est la règle déjà tenue par l'arbre des séries : l'inverse obligerait à ouvrir chaque bloc pour retrouver un livre qu'on voyait très bien avant. ⚠️ Replié, le bloc annonce toujours ce qu'il contient (« 5 tomes ») : sans ce compte, le compteur du haut du catalogue paraîtrait mentir. *@
  • @* ⚠️ Aria.Etat, et non le booléen nu : voir la mise en garde qu'il porte. *@ @* Le nom mène à la SÉRIE : c'est le seul écran qui montre aussi les tomes manquants, ce que le catalogue ne peut pas faire. *@ @Entree.Serie!.Titre @Entree.NombreLivres tome@(Entree.NombreLivres > 1 ? "s" : "")
    @if (Deplie) { @if (Entree.SousEntrees.Count > 0) { } @if (Entree.Livres.Count > 0) { } }
  • @code { [Parameter, EditorRequired] public EntreeCatalogue Entree { get; set; } = default!; /// /// Blocs REPLIÉS, par identifiant de série — et non dépliés : le défaut est de tout montrer. /// /// /// État local de l'écran, volontairement non persistant, comme celui de l'arbre des séries : /// c'est un confort de lecture, pas une propriété de la série. Il survit en revanche aux /// rechargements du catalogue (frappe dans la recherche, filtre), le jeu appartenant à /// l'écran et non au bloc. /// [Parameter, EditorRequired] public ISet Replies { get; set; } = new HashSet(); private bool Deplie => !Replies.Contains(Entree.Serie!.Id); private void Basculer() { if (!Replies.Add(Entree.Serie!.Id)) { Replies.Remove(Entree.Serie!.Id); } } }