Sépare consultation et édition pour les lots B1 B2 B3
Réutilise la carte livre du catalogue, sépare les modes des séries et des envies, et déplie les œuvres bibliographiques non possédées. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
co-authored by
Copilot
parent
5d45eb492e
commit
3d5e73838e
@@ -1,4 +1,5 @@
|
||||
@page "/series/{Id:int}"
|
||||
@page "/series/{Id:int}/edition"
|
||||
@inject ServiceLivresApi Api
|
||||
@inject NavigationManager Navigation
|
||||
@inject EtatReseau Reseau
|
||||
@@ -14,11 +15,14 @@
|
||||
}
|
||||
else
|
||||
{
|
||||
@if (_parente is { } parente)
|
||||
@if (!ModeEdition && _parente is { } parente)
|
||||
{
|
||||
@if (!ModeEdition)
|
||||
{
|
||||
<p class="message-discret">
|
||||
Fait partie de <a href="@($"series/{parente.Id}")">@parente.Titre</a>.
|
||||
</p>
|
||||
}
|
||||
}
|
||||
|
||||
<h1 class="titre-page">@_serie.Titre</h1>
|
||||
@@ -47,7 +51,7 @@ else
|
||||
}
|
||||
|
||||
@* Les sous-séries d'un cycle : on les liste, on ne les déplie pas — chacune a son écran. *@
|
||||
@if (_filles.Count > 0)
|
||||
@if (!ModeEdition && _filles.Count > 0)
|
||||
{
|
||||
<h2 class="titre-section">Séries de ce cycle</h2>
|
||||
<ul class="liste-sous-series">
|
||||
@@ -63,7 +67,7 @@ else
|
||||
</ul>
|
||||
}
|
||||
|
||||
@if (_serie.Elements.Count > 0)
|
||||
@if (!ModeEdition && _serie.Elements.Count > 0)
|
||||
{
|
||||
<h2 class="titre-section">Ordre de lecture</h2>
|
||||
|
||||
@@ -94,20 +98,27 @@ else
|
||||
</div>
|
||||
|
||||
<div class="carte-corps">
|
||||
@if (element.LivreId is { } livreId)
|
||||
@if (element.LivreId is { } livreId && _livresCatalogue.FirstOrDefault(l => l.Id == livreId) is { } livre)
|
||||
{
|
||||
<a class="carte-titre" href="@($"livres/{livreId}")">@element.Titre</a>
|
||||
<CarteLivre Livre="livre" />
|
||||
}
|
||||
else if (element.LivreId is { } idRattache)
|
||||
{
|
||||
<a class="carte-titre" href="@($"livres/{idRattache}")">@element.Titre</a>
|
||||
}
|
||||
else
|
||||
{
|
||||
<p class="carte-titre">@element.Titre</p>
|
||||
}
|
||||
|
||||
@if (!string.IsNullOrWhiteSpace(element.Auteurs))
|
||||
@if ((element.LivreId is null || !_livresCatalogue.Any(l => l.Id == element.LivreId))
|
||||
&& !string.IsNullOrWhiteSpace(element.Auteurs))
|
||||
{
|
||||
<p class="carte-auteur">@element.Auteurs</p>
|
||||
}
|
||||
|
||||
@if (element.LivreId is null || !_livresCatalogue.Any(l => l.Id == element.LivreId))
|
||||
{
|
||||
<p class="carte-details">
|
||||
@if (!element.Possede)
|
||||
{
|
||||
@@ -120,6 +131,7 @@ else
|
||||
<span class="etiquette etiquette-prete">Prêté à @emprunteur</span>
|
||||
}
|
||||
</p>
|
||||
}
|
||||
|
||||
<div class="actions-tome">
|
||||
@if (!element.Possede)
|
||||
@@ -161,12 +173,12 @@ else
|
||||
value="@_recherche" @oninput="ChercherAsync"
|
||||
aria-label="Chercher un livre à rattacher" />
|
||||
|
||||
@foreach (var livre in _resultats)
|
||||
@foreach (var resultat in _resultats)
|
||||
{
|
||||
<button type="button" class="bouton bouton-discret"
|
||||
@key="livre.Id"
|
||||
@onclick="() => RattacherAsync(element.Id, livre.Id)">
|
||||
@livre.Titre@(livre.AuteursAffiches is { } a ? $" — {a}" : "")
|
||||
@key="resultat.Id"
|
||||
@onclick="() => RattacherAsync(element.Id, resultat.Id)">
|
||||
@resultat.Titre@(resultat.AuteursAffiches is { } a ? $" — {a}" : "")
|
||||
</button>
|
||||
}
|
||||
</div>
|
||||
@@ -177,6 +189,8 @@ else
|
||||
</ul>
|
||||
}
|
||||
|
||||
@if (!ModeEdition)
|
||||
{
|
||||
<h2 class="titre-section">Ajouter un tome</h2>
|
||||
|
||||
@*
|
||||
@@ -221,7 +235,10 @@ else
|
||||
}
|
||||
</div>
|
||||
}
|
||||
}
|
||||
|
||||
@if (ModeEdition)
|
||||
{
|
||||
<h2 class="titre-section">La série</h2>
|
||||
|
||||
<label class="champ">
|
||||
@@ -267,6 +284,21 @@ else
|
||||
}
|
||||
</p>
|
||||
}
|
||||
}
|
||||
@if (!ModeEdition)
|
||||
{
|
||||
<nav class="actions-flottantes">
|
||||
@if (Reseau.EnLigne)
|
||||
{
|
||||
<a class="bouton bouton-principal" href="@($"series/{Id}/edition")">Modifier</a>
|
||||
}
|
||||
else
|
||||
{
|
||||
<button type="button" class="bouton bouton-principal" disabled
|
||||
title="@EtatReseau.MotifHorsLigne">Modifier</button>
|
||||
}
|
||||
</nav>
|
||||
}
|
||||
}
|
||||
|
||||
@code {
|
||||
@@ -276,6 +308,7 @@ else
|
||||
[Parameter] public int Id { get; set; }
|
||||
|
||||
private IReadOnlyList<SerieDto> _toutes = [];
|
||||
private IReadOnlyList<LivreDto> _livresCatalogue = [];
|
||||
private SerieDto? _serie;
|
||||
private SerieDto? _parente;
|
||||
private List<SerieDto> _filles = [];
|
||||
@@ -296,6 +329,10 @@ else
|
||||
|
||||
private string? MotifBlocage => Reseau.EnLigne ? null : EtatReseau.MotifHorsLigne;
|
||||
|
||||
private bool ModeEdition =>
|
||||
Navigation.ToAbsoluteUri(Navigation.Uri).AbsolutePath.TrimEnd('/')
|
||||
.EndsWith("/edition", StringComparison.OrdinalIgnoreCase);
|
||||
|
||||
/// <summary>
|
||||
/// Séries dans lesquelles celle-ci peut être rangée.
|
||||
/// </summary>
|
||||
@@ -326,7 +363,13 @@ else
|
||||
return false;
|
||||
}
|
||||
|
||||
protected override void OnInitialized() => Reseau.Change += SurChangementReseau;
|
||||
protected override void OnInitialized()
|
||||
{
|
||||
Reseau.Change += SurChangementReseau;
|
||||
Navigation.LocationChanged += SurNavigation;
|
||||
}
|
||||
|
||||
private void SurNavigation(object? _, LocationChangedEventArgs __) => InvokeAsync(StateHasChanged);
|
||||
|
||||
private void SurChangementReseau() => _ = InvokeAsync(async () =>
|
||||
{
|
||||
@@ -334,7 +377,11 @@ else
|
||||
StateHasChanged();
|
||||
});
|
||||
|
||||
public void Dispose() => Reseau.Change -= SurChangementReseau;
|
||||
public void Dispose()
|
||||
{
|
||||
Reseau.Change -= SurChangementReseau;
|
||||
Navigation.LocationChanged -= SurNavigation;
|
||||
}
|
||||
|
||||
protected override Task OnParametersSetAsync() => ChargerAsync();
|
||||
|
||||
@@ -342,6 +389,7 @@ else
|
||||
{
|
||||
_chargement = true;
|
||||
_toutes = await Api.ListerSeriesAsync();
|
||||
_livresCatalogue = await Api.ListerAsync(new CritereLivres());
|
||||
_chargement = false;
|
||||
|
||||
Rattacher();
|
||||
|
||||
Reference in New Issue
Block a user