diff --git a/MaBibli.Client/Composants/ArbreSerie.razor b/MaBibli.Client/Composants/ArbreSerie.razor index 2499c93..7ea119f 100644 --- a/MaBibli.Client/Composants/ArbreSerie.razor +++ b/MaBibli.Client/Composants/ArbreSerie.razor @@ -1,78 +1,86 @@ @using MaBibli.Shared.Dtos -
  • -
    - - @Serie.Titre - @Avancement() +@* + L'arbre des séries : rien d'autre que la descendance. + + ⚠️ Il dépliait auparavant la liste complète des tomes de chaque série, carte de livre + comprise. Un cycle de quatre séries occupait alors plusieurs écrans, et l'on ne voyait + justement plus ce qu'un arbre sert à voir — qui contient quoi. Les tomes ont leur écran, + celui de la série ; ici on ne montre que le titre, l'avancement, et le lien qui y mène. + + Corollaire : tout est DÉPLIÉ par défaut, et l'on replie ce dont on ne veut pas. L'inverse + (tout replié) obligeait à ouvrir chaque nœud pour découvrir s'il contenait quelque chose, + c'est-à-dire à faire à la main le travail que l'arbre est censé faire. +*@ +
  • +
    + @if (Enfants.Count > 0) + { + + } + else + { + @* Une puce à la place de la bascule : sans elle, les titres sans descendance ne + s'aligneraient pas sur ceux qui en ont. *@ + + } + + @Serie.Titre + @Avancement() + @if (ActionsActives) { - - + + + + }
    - @if (Deplie) + @* Le chemin déjà rendu coupe la récursion : une boucle résiduelle en base ferait sinon + boucler le rendu Razor à l'infini. Le garde-fou serveur, lui, reste borné par le + nombre de séries. *@ + @if (Deplie && Enfants.Count > 0) { -
    - @if (Serie.Elements.Count == 0) +
    + }
  • @code { [Parameter, EditorRequired] public SerieDto Serie { get; set; } = default!; [Parameter, EditorRequired] public IReadOnlyList Toutes { get; set; } = []; - [Parameter, EditorRequired] public IReadOnlyList Livres { get; set; } = []; [Parameter, EditorRequired] public IReadOnlyDictionary Totaux { get; set; } = new Dictionary(); [Parameter] public IReadOnlySet Chemin { get; set; } = new HashSet(); - [Parameter] public ISet Deplies { get; set; } = new HashSet(); + + /// + /// Nœuds REPLIÉS, et non dépliés : le défaut est de tout montrer. + /// + /// + /// État local de l'écran, volontairement non persistant : c'est un confort de lecture, + /// pas une propriété de la série. + /// + [Parameter] public ISet Replies { get; set; } = new HashSet(); + [Parameter] public bool ActionsActives { get; set; } [Parameter] public string? MotifBlocage { get; set; } [Parameter] public EventCallback OnDeplacer { get; set; } @@ -90,24 +98,28 @@ .ToList(); private int _index => Soeurs.FindIndex(s => s.Id == Serie.Id); - private bool Deplie => Deplies.Contains(Serie.Id); + private bool Deplie => !Replies.Contains(Serie.Id); private IReadOnlySet CheminAvecSerie => new HashSet(Chemin) { Serie.Id }; + /// + /// « 3 sur 7 tomes », en comptant les descendants — c'est ce qu'on vient chercher. + /// private string Avancement() { var total = Totaux.TryGetValue(Serie.Id, out var valeur) ? valeur : (Possedes: Serie.NombrePossedes, Total: Serie.Elements.Count); + return total.Total == 0 - ? "Aucun tome recensé" + ? "aucun tome recensé" : $"{total.Possedes} sur {total.Total} tome{(total.Total > 1 ? "s" : "")}"; } private void Basculer() { - if (!Deplies.Add(Serie.Id)) + if (!Replies.Add(Serie.Id)) { - Deplies.Remove(Serie.Id); + Replies.Remove(Serie.Id); } } diff --git a/MaBibli.Client/Pages/Serie.razor b/MaBibli.Client/Pages/Serie.razor index bac9bda..d2d7cce 100644 --- a/MaBibli.Client/Pages/Serie.razor +++ b/MaBibli.Client/Pages/Serie.razor @@ -1,5 +1,6 @@ @page "/series/{Id:int}" @page "/series/{Id:int}/edition" +@page "/series/{Id:int}/ordre" @inject ServiceLivresApi Api @inject NavigationManager Navigation @inject EtatReseau Reseau @@ -39,6 +40,15 @@ else }

    + @if (ModeOrdre) + { +

    + Rangez les tomes dans l'ordre où vous voulez les lire — ce n'est + pas toujours l'ordre de publication : une préquelle se lit avant le livre paru dix + ans plus tôt. Rien d'autre ne se modifie depuis cet écran. +

    + } + @if (_erreur is not null) { @@ -56,13 +66,17 @@ else @if (!ModeEdition && _filles.Count > 0) {

    Séries de ce cycle

    -
      +
        @foreach (var fille in _filles) { - }
      @@ -83,19 +97,25 @@ else {
    • - + @if (ModeOrdre) + { + + } - + @if (ModeOrdre) + { + + }
      @@ -134,6 +154,8 @@ else

      } + @if (!ModeOrdre) + {
      @if (!element.Possede) { @@ -172,6 +194,7 @@ else Retirer
      + } @if (_rattachement == element.Id) { @@ -237,7 +260,7 @@ else
    } - @if (!ModeEdition) + @if (ModeConsultation) {

    Ajouter un tome

    @@ -333,11 +356,24 @@ else

    } } - @if (!ModeEdition) + @if (ModeOrdre) + { + + } + else if (ModeConsultation) {