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,6 +1,8 @@
|
||||
@page "/souhaits"
|
||||
@page "/souhaits/ordre"
|
||||
@inject ServiceLivresApi Api
|
||||
@inject EtatReseau Reseau
|
||||
@inject NavigationManager Navigation
|
||||
@implements IDisposable
|
||||
|
||||
<PageTitle>MaBibli — liste d'envies</PageTitle>
|
||||
@@ -92,7 +94,7 @@ else
|
||||
</p>
|
||||
}
|
||||
|
||||
@if (_souhaits.Count > 1)
|
||||
@if (ModeOrdre && _souhaits.Count > 1)
|
||||
{
|
||||
<p class="champ-aide">
|
||||
Du plus désiré au moins désiré. Utilisez les flèches pour déplacer une envie —
|
||||
@@ -110,13 +112,13 @@ else
|
||||
{
|
||||
<li class="carte-souhait @(_glisse == souhait.Id ? "carte-glissee" : null)"
|
||||
@key="souhait.Id"
|
||||
draggable="@((Reseau.EnLigne && _souhaits.Count > 1).ToString().ToLowerInvariant())"
|
||||
@ondragstart="() => _glisse = souhait.Id"
|
||||
@ondragend="() => _glisse = null"
|
||||
@ondragover:preventDefault="true"
|
||||
draggable="@((ModeOrdre && Reseau.EnLigne && _souhaits.Count > 1).ToString().ToLowerInvariant())"
|
||||
@ondragstart="() => DebuterGlisse(souhait.Id)"
|
||||
@ondragend="TerminerGlisse"
|
||||
@ondragover:preventDefault="ModeOrdre"
|
||||
@ondrop="() => DeposerAsync(index)">
|
||||
|
||||
@if (_souhaits.Count > 1)
|
||||
@if (ModeOrdre && _souhaits.Count > 1)
|
||||
{
|
||||
<div class="rang-actions">
|
||||
<button type="button" class="bouton bouton-compact"
|
||||
@@ -182,12 +184,15 @@ else
|
||||
}
|
||||
</div>
|
||||
|
||||
@if (!ModeOrdre)
|
||||
{
|
||||
<button type="button" class="bouton bouton-compact bouton-danger"
|
||||
disabled="@(_enCours || !Reseau.EnLigne)" title="@MotifBlocage"
|
||||
@onclick="() => SupprimerAsync(souhait)"
|
||||
aria-label="@($"Retirer « {souhait.Titre} » de la liste d'envies")">
|
||||
Retirer
|
||||
</button>
|
||||
}
|
||||
</li>
|
||||
}
|
||||
</ul>
|
||||
@@ -197,6 +202,14 @@ else
|
||||
@* L'ajout est passé dans son propre écran : la page ne montre plus que la liste, comme la
|
||||
fiche livre ne montre plus son formulaire. *@
|
||||
<nav class="actions-flottantes">
|
||||
@if (ModeOrdre)
|
||||
{
|
||||
<a class="bouton bouton-discret" href="souhaits">Terminer</a>
|
||||
}
|
||||
else if (Reseau.EnLigne)
|
||||
{
|
||||
<a class="bouton bouton-discret" href="souhaits/ordre">Modifier l'ordre</a>
|
||||
}
|
||||
@if (Reseau.EnLigne)
|
||||
{
|
||||
<a class="bouton bouton-principal" href="souhaits/ajout">Ajouter une envie</a>
|
||||
@@ -213,13 +226,19 @@ else
|
||||
private bool _enCours;
|
||||
private int? _glisse;
|
||||
private string? _erreur;
|
||||
private bool ModeOrdre =>
|
||||
Navigation.ToAbsoluteUri(Navigation.Uri).AbsolutePath.TrimEnd('/')
|
||||
.EndsWith("/souhaits/ordre", StringComparison.OrdinalIgnoreCase);
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
Reseau.Change += SurChangementReseau;
|
||||
Navigation.LocationChanged += SurNavigation;
|
||||
await ChargerAsync();
|
||||
}
|
||||
|
||||
private void SurNavigation(object? _, LocationChangedEventArgs __) => InvokeAsync(StateHasChanged);
|
||||
|
||||
/// <summary>
|
||||
/// Recharge la liste au retour du réseau, et redessine pour rendre les actions à l'écran.
|
||||
/// </summary>
|
||||
@@ -233,7 +252,11 @@ else
|
||||
StateHasChanged();
|
||||
});
|
||||
|
||||
public void Dispose() => Reseau.Change -= SurChangementReseau;
|
||||
public void Dispose()
|
||||
{
|
||||
Reseau.Change -= SurChangementReseau;
|
||||
Navigation.LocationChanged -= SurNavigation;
|
||||
}
|
||||
|
||||
/// <summary>Raison du blocage des écritures, ou <c>null</c> quand tout est possible.</summary>
|
||||
private string? MotifBlocage => Reseau.EnLigne ? null : EtatReseau.MotifHorsLigne;
|
||||
@@ -307,7 +330,7 @@ else
|
||||
/// <summary>Fin d'un glisser-déposer : la carte saisie prend la place de celle survolée.</summary>
|
||||
private async Task DeposerAsync(int cible)
|
||||
{
|
||||
if (_souhaits is null || _glisse is not { } id)
|
||||
if (!ModeOrdre || _souhaits is null || _glisse is not { } id)
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -321,6 +344,16 @@ else
|
||||
}
|
||||
}
|
||||
|
||||
private void DebuterGlisse(int id)
|
||||
{
|
||||
if (ModeOrdre && Reseau.EnLigne)
|
||||
{
|
||||
_glisse = id;
|
||||
}
|
||||
}
|
||||
|
||||
private void TerminerGlisse() => _glisse = null;
|
||||
|
||||
private async Task SupprimerAsync(SouhaitDto souhait)
|
||||
{
|
||||
_enCours = true;
|
||||
|
||||
Reference in New Issue
Block a user