From d76fb10ee071cdec4a02afb1233db393d4fb7f60 Mon Sep 17 00:00:00 2001 From: mathieu Date: Wed, 9 Sep 2026 19:16:33 +0200 Subject: [PATCH] Un liste d'ouvrage rafale est accessible depuis le menu Co-Authored-By: Claude Sonnet 5 --- MaBibli.Client/Layout/MainLayout.razor | 33 ++++++++++++++++++++++---- MaBibli.Client/wwwroot/css/app.css | 18 ++++++++++++++ 2 files changed, 47 insertions(+), 4 deletions(-) diff --git a/MaBibli.Client/Layout/MainLayout.razor b/MaBibli.Client/Layout/MainLayout.razor index 3395f7b..a8ea9e3 100644 --- a/MaBibli.Client/Layout/MainLayout.razor +++ b/MaBibli.Client/Layout/MainLayout.razor @@ -3,6 +3,7 @@ @inject ServiceLivresApi Api @inject EtatReseau Reseau @inject NavigationManager Navigation +@inject CacheHorsLigne Cache @* Mise en page pensée mobile d'abord : un bandeau, une colonne, rien à gauche. @@ -93,6 +94,16 @@ } + @* + Une rafale non vidée reste consultable ailleurs sur le site — sans quoi y revenir + depuis un autre écran demande de refaire tout le chemin d'« Ajouter ». L'entrée + disparaît d'elle-même une fois la file effacée (bouton « Nouvelle rafale »). + *@ + @if (_rafale is { Total: > 0 }) + { + @LibelleRafale + } + Catalogue Auteurs Séries @@ -148,6 +159,12 @@ private ElementReference _menu; + /// Rafale non vidée, s'il y en a une. Relue à chaque navigation (lot AB). + private Rafale? _rafale; + + private string LibelleRafale => + _rafale is { Crees: > 0 } r ? $"Compte rendu ({r.Crees})" : "Rafale à reprendre"; + protected override async Task OnInitializedAsync() { Reseau.Change += SurChangementReseau; @@ -158,6 +175,8 @@ // entrées empilées au-dessus de la liste des auteurs. Navigation.LocationChanged += SurNavigation; + _rafale = await Cache.LireRafaleAsync(); + // Écoute des bascules online/offline avant tout appel : un démarrage hors-ligne doit // aller directement au cache, sans attendre l'échec d'une requête. await Reseau.DemarrerAsync(); @@ -226,13 +245,19 @@ private void SurNavigation(object? _, LocationChangedEventArgs __) { - if (!_menuOuvert) + if (_menuOuvert) { - return; + _menuOuvert = false; } - _menuOuvert = false; - _ = InvokeAsync(StateHasChanged); + // ⚠️ Relu à CHAQUE navigation, pas seulement au quitter de l'écran de rafale : c'est ce + // qui fait apparaître l'entrée du menu dès le premier code scanné, et disparaître dès + // la file effacée, où qu'on soit rendu entre-temps. + _ = InvokeAsync(async () => + { + _rafale = await Cache.LireRafaleAsync(); + StateHasChanged(); + }); } /// diff --git a/MaBibli.Client/wwwroot/css/app.css b/MaBibli.Client/wwwroot/css/app.css index 651dbfa..b8cb6e0 100644 --- a/MaBibli.Client/wwwroot/css/app.css +++ b/MaBibli.Client/wwwroot/css/app.css @@ -1664,6 +1664,20 @@ body { font-size: 0.9rem; } +/* + Le compte rendu de la dernière rafale (lot AB) : une entrée transitoire, présente + seulement tant qu'une file non vidée existe. Le même jaune que la pastille hors-ligne + la distingue des six destinations permanentes — c'est une chose à finir, pas un lieu. +*/ +.menu-lien-rafale { + border-left-color: #f5d76e; + font-weight: 600; +} + +.menu-lien-rafale.active { + border-left-color: #f5d76e; +} + /* À partir de 40rem la rangée tient sans se comprimer, et la bascule n'a plus de raison d'être. Le point de rupture est répété dans `MainLayout.razor.css` @@ -1705,6 +1719,10 @@ body { border-bottom-color: #f5d76e; } + .menu-lien-rafale { + border-bottom-color: #f5d76e; + } + /* En rangée, un filet au-dessus ne séparerait rien : le trait passe à GAUCHE, et la marge supérieure disparaît sous peine de désaligner l'entrée du reste de la rangée. */ .menu-lien-annexe {