Files
TravelMateAdmin/TravelMateAdmin/ViewModels/MessagesViewModel.cs

98 lines
2.7 KiB
C#

using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using System.Collections.ObjectModel;
using TravelMateAdmin.Models;
using TravelMateAdmin.Services;
namespace TravelMateAdmin.ViewModels;
public partial class MessagesViewModel : ObservableObject
{
private readonly IDatabaseService _databaseService;
[ObservableProperty]
private ObservableCollection<Message> messages = new();
[ObservableProperty]
private bool isLoading;
[ObservableProperty]
private string selectedFilter = "Tout";
public List<string> Filters { get; } = new() { "Tout", "À faire", "Fait" };
public MessagesViewModel(IDatabaseService databaseService)
{
_databaseService = databaseService;
}
[RelayCommand]
public async Task LoadMessagesAsync()
{
IsLoading = true;
try
{
System.Diagnostics.Debug.WriteLine($"=== CHARGEMENT MESSAGES ===");
System.Diagnostics.Debug.WriteLine($"Filtre sélectionné: {SelectedFilter}");
bool? isDone = SelectedFilter switch
{
"À faire" => false,
"Fait" => true,
_ => null
};
System.Diagnostics.Debug.WriteLine($"isDone filter: {isDone}");
var messagesList = await _databaseService.GetMessagesFilteredAsync(isDone);
System.Diagnostics.Debug.WriteLine($"Messages récupérés: {messagesList.Count}");
Messages.Clear();
foreach (var message in messagesList)
{
System.Diagnostics.Debug.WriteLine($"Message: {message.FullName} - {message.Email}");
Messages.Add(message);
}
System.Diagnostics.Debug.WriteLine($"Total messages affichés: {Messages.Count}");
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine($"❌ Error loading messages: {ex.Message}");
System.Diagnostics.Debug.WriteLine($"Stack trace: {ex.StackTrace}");
}
finally
{
IsLoading = false;
}
}
[RelayCommand]
private async Task GoBackAsync()
{
await Shell.Current.GoToAsync("..");
}
[RelayCommand]
private async Task ToggleMessageStatusAsync(Message message)
{
if (message == null) return;
var success = await _databaseService.UpdateMessageStatusAsync(message.Id, !message.Done);
if (success)
{
message.Done = !message.Done;
}
}
[RelayCommand]
private async Task RefreshAsync()
{
await LoadMessagesAsync();
}
partial void OnSelectedFilterChanged(string value)
{
_ = LoadMessagesAsync();
}
}