You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
PocketBook/Sources/BookApp/ViewModel/ViewModelDetailProvider.cs

109 lines
3.4 KiB

using Model;
using System.Diagnostics;
using System.Threading.Tasks;
using System.Windows.Input;
using ToolKit;
using VMWrapper;
namespace BookApp.ViewModel
{
[QueryProperty(nameof(BookId), "BookId")]
public class ViewModelDetailProvider : BaseViewModel
{
private readonly DetailBookViewModel _detailBookViewModel;
private string _id;
public string BookId
{
get => _id;
set
{
if (_id != value)
{
_id = value;
OnPropertyChanged();
LoadBookDetailAsync(_id);
}
}
}
private Book _bookDetail;
public Book BookDetail
{
get => _bookDetail;
set
{
_bookDetail = value;
OnPropertyChanged();
}
}
// Command Pop-up
public ICommand _popUpCommand;
public ICommand PopUpCommand =>
_popUpCommand ??= new CommandPersonnal(ShowPopUP);
public ViewModelDetailProvider(DetailBookViewModel detailBookViewModel)
{
_detailBookViewModel =
detailBookViewModel ?? throw new ArgumentNullException(nameof(detailBookViewModel));
}
private async void ShowPopUP()
{
string action = await DisplayActionSheet("Quel est le statut du livre ?", "Cancel", null, "Finished", "Reading", "NotRead", "ToBeRead");
switch (action)
{
case "Finished":
BookDetail.Status = Status.Finished;
OnPropertyChanged(nameof(BookDetail));
_detailBookViewModel.UpdateColleciton();
break;
case "Reading":
BookDetail.Status = Status.Reading;
OnPropertyChanged(nameof(BookDetail));
_detailBookViewModel.UpdateColleciton();
break;
case "NotRead":
BookDetail.Status = Status.NotRead;
OnPropertyChanged(nameof(BookDetail));
_detailBookViewModel.UpdateColleciton();
break;
case "ToBeRead":
BookDetail.Status = Status.ToBeRead;
OnPropertyChanged(nameof(BookDetail));
_detailBookViewModel.UpdateColleciton();
break;
default:
BookDetail.Status = Status.Unknown;
OnPropertyChanged(nameof(BookDetail));
break;
}
}
public async Task<string> DisplayActionSheet(string title, string cancel, string destruction, params string[] buttons)
{
return await Application.Current.MainPage.DisplayActionSheet(title, cancel, destruction, buttons);
}
private async void LoadBookDetailAsync(string bookId)
{
if (string.IsNullOrWhiteSpace(_id))
return;
try
{
await _detailBookViewModel.LoadBookDetail(bookId);
BookDetail = _detailBookViewModel.BookDetail;
}
catch (Exception ex)
{
Debug.WriteLine($"An error occurred: {ex.Message}");
}
}
}
}