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 })
+ {
+
+ }
+
@@ -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 {