Un liste d'ouvrage rafale est accessible depuis le menu

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
mathieu
2026-09-09 19:16:33 +02:00
co-authored by Claude Sonnet 5
parent 42dec0dbd1
commit d76fb10ee0
2 changed files with 47 additions and 4 deletions
+29 -4
View File
@@ -3,6 +3,7 @@
@inject ServiceLivresApi Api @inject ServiceLivresApi Api
@inject EtatReseau Reseau @inject EtatReseau Reseau
@inject NavigationManager Navigation @inject NavigationManager Navigation
@inject CacheHorsLigne Cache
@* @*
Mise en page pensée mobile d'abord : un bandeau, une colonne, rien à gauche. Mise en page pensée mobile d'abord : un bandeau, une colonne, rien à gauche.
@@ -93,6 +94,16 @@
</div> </div>
} }
@*
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 })
{
<NavLink class="menu-lien menu-lien-rafale" href="ajout/rafale">@LibelleRafale</NavLink>
}
<NavLink class="menu-lien" href="" Match="NavLinkMatch.All">Catalogue</NavLink> <NavLink class="menu-lien" href="" Match="NavLinkMatch.All">Catalogue</NavLink>
<NavLink class="menu-lien" href="auteurs">Auteurs</NavLink> <NavLink class="menu-lien" href="auteurs">Auteurs</NavLink>
<NavLink class="menu-lien" href="series">Séries</NavLink> <NavLink class="menu-lien" href="series">Séries</NavLink>
@@ -148,6 +159,12 @@
private ElementReference _menu; private ElementReference _menu;
/// <summary>Rafale non vidée, s'il y en a une. Relue à chaque navigation (lot AB).</summary>
private Rafale? _rafale;
private string LibelleRafale =>
_rafale is { Crees: > 0 } r ? $"Compte rendu ({r.Crees})" : "Rafale à reprendre";
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
{ {
Reseau.Change += SurChangementReseau; Reseau.Change += SurChangementReseau;
@@ -158,6 +175,8 @@
// entrées empilées au-dessus de la liste des auteurs. // entrées empilées au-dessus de la liste des auteurs.
Navigation.LocationChanged += SurNavigation; Navigation.LocationChanged += SurNavigation;
_rafale = await Cache.LireRafaleAsync();
// Écoute des bascules online/offline avant tout appel : un démarrage hors-ligne doit // É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. // aller directement au cache, sans attendre l'échec d'une requête.
await Reseau.DemarrerAsync(); await Reseau.DemarrerAsync();
@@ -226,13 +245,19 @@
private void SurNavigation(object? _, LocationChangedEventArgs __) private void SurNavigation(object? _, LocationChangedEventArgs __)
{ {
if (!_menuOuvert) if (_menuOuvert)
{ {
return; _menuOuvert = false;
} }
_menuOuvert = false; // ⚠️ Relu à CHAQUE navigation, pas seulement au quitter de l'écran de rafale : c'est ce
_ = InvokeAsync(StateHasChanged); // 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();
});
} }
/// <summary> /// <summary>
+18
View File
@@ -1664,6 +1664,20 @@ body {
font-size: 0.9rem; 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 À 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` 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; 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 /* 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. */ supérieure disparaît sous peine de désaligner l'entrée du reste de la rangée. */
.menu-lien-annexe { .menu-lien-annexe {