@page "/PhotoSelect" @rendermode InteractiveServer @using BlazorBootstrap; @using Microsoft.AspNetCore.WebUtilities @using ModelsLib @using PhotoShareHelri.Components.Blocs @using System.Text @inject NavigationManager NavManager @inject EmailService mailService @inject PhotoService ShootingDb @inject IDialogService DialogService @using MudBlazor Sélection des photos @Title Valider la sélection @SelectedImages.Count / @MaxSelect photo(s) sélectionnée(s) @for (int index = 0; index < Images.Count; index++) { var img = Images[index]; var isSelected = SelectedImages.Contains(img); var buttonClass = $"select-icon-btn {(isSelected ? "selected" : "not-selected")}";
}
Valider la sélection
@code { #region Variables HashSet SelectedImages = new(); private int MaxSelect = 1; // Liste des images disponibles private List Images = new(); public string Title { get; set; } bool IsModalZoomOpen = false; string? CurrentImage; int CurrentIndex => CurrentImage == null ? -1 : Images.IndexOf(CurrentImage); bool CanNext => CurrentIndex >= 0 && CurrentIndex < Images.Count - 1; bool CanPrevious => CurrentIndex > 0; private string ShootingId; private ShootingData Datas { get; set; } #endregion #region modal zoom /// /// Ouverture de la modal à partir du clic sur image voulu /// void OpenModalZoom(string img) { CurrentImage = img; IsModalZoomOpen = true; } /// /// fermeture de la modal /// void CloseModalZoom() { IsModalZoomOpen = false; } /// /// photo suivante dans la modal /// dans la liste des photos affichés /// void NextModalZoom() { if (CanNext) CurrentImage = Images[CurrentIndex + 1]; } /// /// photo précédente /// void PreviousModalZoom() { if (CanPrevious) CurrentImage = Images[CurrentIndex - 1]; } #endregion /// /// arrivé sur la page /// protected override async Task OnInitializedAsync() { //récupération de l'identifiant de shooting, si identifiant null ou si recherche inexistante redirection vers la page de recherche de shooting var uri = NavManager.ToAbsoluteUri(NavManager.Uri); if (QueryHelpers.ParseQuery(uri.Query).TryGetValue("Id", out var id)) { Datas = ShootingDb.GetInfosShooting(id); if (!string.IsNullOrEmpty(id)) { ShootingId = id; Images = ShootingDb.LireContenu(ShootingId); } Title = "Résultat du shooting " + Datas.Key; } } /// /// Séléction de l'image dans la liste des photos choisies /// /// image sélectionné par son hash private void ToggleImage(string img) { if (SelectedImages.Contains(img)) { SelectedImages.Remove(img); } else { SelectedImages.Add(img); } } /// /// envoi par mail de la sélection des photos /// private async void SendSelection() { if (SelectedImages == null || SelectedImages.Count == 0) return; var fichiers = string.Join(";", SelectedImages) .Split(';', StringSplitOptions.RemoveEmptyEntries) .Select(Path.GetFileName) .ToList(); var body = new StringBuilder(); body.Append("

Photos sélectionnées 📸

"); body.Append("
    "); foreach (var fichier in fichiers) { body.Append($"
  • {fichier}
  • "); } body.Append("
"); mailService.EnvoyerMailAsync("Confirmation sélection du shooting" + ShootingId, body).GetAwaiter(); Datas.IsPhotosSelected = true; await ShootingDb.UpdateShootingInfo(Datas); } }