ADD : page Favorite and AddToFavorites Method

commands-19-09
Lou BRODA 1 year ago
parent 3b2d64ed04
commit 5ef7f9f9d8

@ -32,6 +32,7 @@ public static class MauiProgram
.AddSingleton<ALirePlusTardView>() .AddSingleton<ALirePlusTardView>()
.AddSingleton<StatutLectureView>() .AddSingleton<StatutLectureView>()
.AddSingleton<EmpruntsPretsView>() .AddSingleton<EmpruntsPretsView>()
.AddSingleton<FavorisView>()
.AddSingleton<NavigatorVM>() .AddSingleton<NavigatorVM>()
@ -48,7 +49,8 @@ public static class MauiProgram
.AddSingleton<FiltrageNoteVM>() .AddSingleton<FiltrageNoteVM>()
.AddSingleton<ALirePlusTardVM>() .AddSingleton<ALirePlusTardVM>()
.AddSingleton<StatutLectureVM>() .AddSingleton<StatutLectureVM>()
.AddSingleton<EmpruntsPretsVM>(); .AddSingleton<EmpruntsPretsVM>()
.AddSingleton<FavorisVM>();
#if DEBUG #if DEBUG
builder.Logging.AddDebug(); builder.Logging.AddDebug();

@ -26,6 +26,9 @@
TextColor="Red" TextColor="Red"
VerticalOptions="Center" VerticalOptions="Center"
Grid.Column="2"/> Grid.Column="2"/>
<Grid.GestureRecognizers>
<TapGestureRecognizer Command="{Binding ButtonCommand}" CommandParameter="{Binding ButtonCommandParameter}"/>
</Grid.GestureRecognizers>
</Grid> </Grid>
</ContentView> </ContentView>

@ -1,3 +1,6 @@
using System.Windows.Input;
using ViewModels;
namespace LivreLand.View.ContentViews; namespace LivreLand.View.ContentViews;
public partial class DetailsLivreButtonView : ContentView public partial class DetailsLivreButtonView : ContentView
@ -16,6 +19,20 @@ public partial class DetailsLivreButtonView : ContentView
set => SetValue(DetailsLivreButtonView.ButtonIconProperty, value); set => SetValue(DetailsLivreButtonView.ButtonIconProperty, value);
} }
public static readonly BindableProperty ButtonCommandProperty = BindableProperty.Create(nameof(ButtonCommand), typeof(ICommand), typeof(DetailsLivreButtonView));
public ICommand ButtonCommand
{
get => (ICommand)GetValue(DetailsLivreButtonView.ButtonCommandProperty);
set => SetValue(DetailsLivreButtonView.ButtonCommandProperty, value);
}
public static readonly BindableProperty ButtonCommandParameterProperty = BindableProperty.Create(nameof(ButtonCommandParameter), typeof(BookVM), typeof(DetailsLivreButtonView));
public BookVM ButtonCommandParameter
{
get => (BookVM)GetValue(DetailsLivreButtonView.ButtonCommandParameterProperty);
set => SetValue(DetailsLivreButtonView.ButtonCommandParameterProperty, value);
}
public DetailsLivreButtonView() public DetailsLivreButtonView()
{ {
InitializeComponent(); InitializeComponent();

@ -277,7 +277,14 @@
<VerticalStackLayout Grid.Row="2"> <VerticalStackLayout Grid.Row="2">
<contentView:SeparatorCutStartView/> <contentView:SeparatorCutStartView/>
<contentView:DetailsLivreButtonView ButtonIcon="heart.png"
ButtonTitle="Ajouter aux favoris"
ButtonCommand="{Binding DetailsLivreVM.Manager.AddToFavoritesCommand}"
ButtonCommandParameter="{Binding DetailsLivreVM.Book}"/>
<contentView:SeparatorCutStartView/>
<contentView:DetailsLivreButtonView ButtonIcon="folder.png" <contentView:DetailsLivreButtonView ButtonIcon="folder.png"
ButtonTitle="Déplacer le livre"/> ButtonTitle="Déplacer le livre"/>

@ -3,6 +3,7 @@
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:view="clr-namespace:LivreLand.View" xmlns:view="clr-namespace:LivreLand.View"
xmlns:contentView="clr-namespace:LivreLand.View.ContentViews" xmlns:contentView="clr-namespace:LivreLand.View.ContentViews"
xmlns:viewModel="clr-namespace:ViewModels;assembly=ViewModels"
x:Class="LivreLand.View.FavorisView" x:Class="LivreLand.View.FavorisView"
Title="FavorisView"> Title="FavorisView">
@ -38,12 +39,12 @@
Style="{StaticResource HeaderCollectionViewText}" Style="{StaticResource HeaderCollectionViewText}"
Grid.Column="1"/> Grid.Column="1"/>
</Grid> </Grid>
<CollectionView ItemsSource="{Binding FavorisBooks}" <CollectionView ItemsSource="{Binding FavorisVM.Manager.AllFavoriteBooks}"
SelectionMode="Single" SelectionMode="Single"
SelectionChanged="OnSelectionChanged" SelectionChanged="OnSelectionChanged"
Grid.Row="2"> Grid.Row="2">
<CollectionView.ItemTemplate> <CollectionView.ItemTemplate>
<DataTemplate> <DataTemplate x:DataType="viewModel:BookVM">
<VerticalStackLayout Margin="10" <VerticalStackLayout Margin="10"
Spacing="20"> Spacing="20">
<VisualStateManager.VisualStateGroups x:Name="SelectionStates"> <VisualStateManager.VisualStateGroups x:Name="SelectionStates">
@ -82,7 +83,7 @@
Stroke="{StaticResource Gray}" Stroke="{StaticResource Gray}"
StrokeShape="RoundRectangle 3" StrokeShape="RoundRectangle 3"
StrokeThickness="3"> StrokeThickness="3">
<Image Source="couverture_la_horde_du_contrevent.png" <Image Source="{Binding ImageSmall}"
Aspect="AspectFill" Aspect="AspectFill"
Grid.Column="0" Grid.Column="0"
Grid.RowSpan="5"/> Grid.RowSpan="5"/>
@ -98,11 +99,11 @@
Style="{StaticResource MasterTitleBookText}" Style="{StaticResource MasterTitleBookText}"
Grid.Column="2" Grid.Column="2"
Grid.Row="0"/> Grid.Row="0"/>
<Label Text="{Binding Author}" <Label Text="Author"
Style="{StaticResource MasterAuthorBookText}" Style="{StaticResource MasterAuthorBookText}"
Grid.Column="2" Grid.Column="2"
Grid.Row="1"/> Grid.Row="1"/>
<Label Text="{Binding State}" <Label Text="{Binding Status}"
Style="{StaticResource MasterStateBookText}" Style="{StaticResource MasterStateBookText}"
Grid.Column="2" Grid.Column="2"
Grid.Row="2"/> Grid.Row="2"/>

@ -1,23 +1,40 @@
using LivreLand.Model; using LivreLand.Model;
using LivreLand.ViewModel;
namespace LivreLand.View; namespace LivreLand.View;
public partial class FavorisView : ContentPage public partial class FavorisView : ContentPage
{ {
public List<BookModel> FavorisBooks { get; set; } = new List<BookModel>() #region Properties
{
new BookModel("La zone du dehors","Alain Damasio","Terminé", 0), public FavorisVM FavorisVM { get; set; }
new BookModel("Le problème à trois corps","Cixin Liu","Terminé", 0)
}; #endregion
#region Constructor
public FavorisView() public FavorisView(FavorisVM favorisVM)
{ {
BindingContext = this; FavorisVM = favorisVM;
InitializeComponent(); InitializeComponent();
} BindingContext = this;
}
#endregion
#region Methods
void OnSelectionChanged(object sender, SelectionChangedEventArgs e) void OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{ {
//App.Current.MainPage.Navigation.PushAsync(new DetailsLivreView()); //App.Current.MainPage.Navigation.PushAsync(new DetailsLivreView());
} }
protected override void OnAppearing()
{
base.OnAppearing();
FavorisVM.Manager.GetFavoriteBooksCommand.Execute(null);
}
#endregion
} }

@ -30,7 +30,7 @@ public partial class TousView : ContentPage
{ {
if (e.CurrentSelection.FirstOrDefault() is BookVM) if (e.CurrentSelection.FirstOrDefault() is BookVM)
{ {
var result = new DetailsLivreVM(e.CurrentSelection.FirstOrDefault() as BookVM); var result = new DetailsLivreVM(this.TousVM.Manager, e.CurrentSelection.FirstOrDefault() as BookVM);
App.Current.MainPage.Navigation.PushAsync(new DetailsLivreView(result)); App.Current.MainPage.Navigation.PushAsync(new DetailsLivreView(result));
} }
} }

@ -12,14 +12,17 @@ namespace LivreLand.ViewModel
{ {
#region Properties #region Properties
public ManagerVM Manager { get; private set; }
public BookVM Book { get; private set; } public BookVM Book { get; private set; }
#endregion #endregion
#region Constructor #region Constructor
public DetailsLivreVM(BookVM bookVM) public DetailsLivreVM(ManagerVM managerVM, BookVM bookVM)
{ {
Manager = managerVM;
Book = bookVM; Book = bookVM;
} }

@ -0,0 +1,31 @@
using PersonalMVVMToolkit;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ViewModels;
namespace LivreLand.ViewModel
{
public class FavorisVM : BaseViewModel
{
#region Properties
public NavigatorVM Navigator { get; private set; }
public ManagerVM Manager { get; private set; }
#endregion
#region Constructor
public FavorisVM(NavigatorVM navigatorVM, ManagerVM managerVM)
{
Navigator = navigatorVM;
Manager = managerVM;
}
#endregion
}
}

@ -70,6 +70,22 @@ namespace Model
return Task.FromResult((result.Item1, result.Item2)); return Task.FromResult((result.Item1, result.Item2));
} }
public Task<(long count, IEnumerable<Book> books)> GetFavoritesBooks(int index, int count)
{
var result = UserLibraryManager.GetFavoritesBooks(index, count).Result;
return Task.FromResult((result.Item1, result.Item2));
}
public Task<bool> AddToFavorites(string id)
{
return UserLibraryManager.AddToFavorites(id);
}
public Task<bool> RemoveFromFavorites(string id)
{
return UserLibraryManager.RemoveFromFavorites(id);
}
public Task<(long count, IEnumerable<Contact> contacts)> GetContacts(int index, int count) public Task<(long count, IEnumerable<Contact> contacts)> GetContacts(int index, int count)
{ {
var result = UserLibraryManager.GetContacts(index, count).Result; var result = UserLibraryManager.GetContacts(index, count).Result;

@ -17,6 +17,12 @@ namespace ViewModels
#region Properties #region Properties
public string Id
{
get => Model.Id;
set => SetProperty(Model.Id, value, v => Model.Id = value);
}
public string ISBN13 public string ISBN13
{ {
get => Model.ISBN13; get => Model.ISBN13;

@ -16,6 +16,7 @@ namespace ViewModels
private readonly ObservableCollection<PublishDateVM> publishDates = new ObservableCollection<PublishDateVM>(); private readonly ObservableCollection<PublishDateVM> publishDates = new ObservableCollection<PublishDateVM>();
private readonly ObservableCollection<RatingsVM> ratings = new ObservableCollection<RatingsVM>(); private readonly ObservableCollection<RatingsVM> ratings = new ObservableCollection<RatingsVM>();
private readonly ObservableCollection<BookVM> toBeReadBooks = new ObservableCollection<BookVM>(); private readonly ObservableCollection<BookVM> toBeReadBooks = new ObservableCollection<BookVM>();
private readonly ObservableCollection<BookVM> favoriteBooks = new ObservableCollection<BookVM>();
private readonly ObservableCollection<LoanVM> currentLoans = new ObservableCollection<LoanVM>(); private readonly ObservableCollection<LoanVM> currentLoans = new ObservableCollection<LoanVM>();
private readonly ObservableCollection<LoanVM> pastLoans = new ObservableCollection<LoanVM>(); private readonly ObservableCollection<LoanVM> pastLoans = new ObservableCollection<LoanVM>();
private readonly ObservableCollection<BorrowingVM> pastBorrowings = new ObservableCollection<BorrowingVM>(); private readonly ObservableCollection<BorrowingVM> pastBorrowings = new ObservableCollection<BorrowingVM>();
@ -52,6 +53,11 @@ namespace ViewModels
get => toBeReadBooks; get => toBeReadBooks;
} }
public ObservableCollection<BookVM> AllFavoriteBooks
{
get => favoriteBooks;
}
public ObservableCollection<LoanVM> AllCurrentLoans public ObservableCollection<LoanVM> AllCurrentLoans
{ {
get => currentLoans; get => currentLoans;
@ -119,6 +125,10 @@ namespace ViewModels
public ICommand GetToBeReadBooksCommand { get; private set; } public ICommand GetToBeReadBooksCommand { get; private set; }
public ICommand GetFavoriteBooksCommand { get; private set; }
public ICommand AddToFavoritesCommand { get; private set; }
public ICommand GetCurrentLoansCommand { get; private set; } public ICommand GetCurrentLoansCommand { get; private set; }
public ICommand GetPastLoansCommand { get; private set; } public ICommand GetPastLoansCommand { get; private set; }
@ -145,6 +155,8 @@ namespace ViewModels
GetBooksByRatingCommand = new RelayCommand(() => GetBooksByRating()); GetBooksByRatingCommand = new RelayCommand(() => GetBooksByRating());
GetAllRatingsCommand = new RelayCommand(() => GetAllRatings()); GetAllRatingsCommand = new RelayCommand(() => GetAllRatings());
GetToBeReadBooksCommand = new RelayCommand(() => GetToBeReadBooks()); GetToBeReadBooksCommand = new RelayCommand(() => GetToBeReadBooks());
GetFavoriteBooksCommand = new RelayCommand(() => GetFavoriteBooks());
AddToFavoritesCommand = new RelayCommand<BookVM>(bookVM => AddToFavorites(bookVM));
GetCurrentLoansCommand = new RelayCommand(() => GetCurrentLoans()); GetCurrentLoansCommand = new RelayCommand(() => GetCurrentLoans());
GetPastLoansCommand = new RelayCommand(() => GetPastLoans()); GetPastLoansCommand = new RelayCommand(() => GetPastLoans());
GetCurrentBorrowingsCommand = new RelayCommand(() => GetCurrentBorrowings()); GetCurrentBorrowingsCommand = new RelayCommand(() => GetCurrentBorrowings());
@ -328,6 +340,27 @@ namespace ViewModels
toBeReadBooks.Add(b); toBeReadBooks.Add(b);
} }
} }
OnPropertyChanged(nameof(ToBeReadBooks));
}
private async Task GetFavoriteBooks()
{
var result = await Model.GetFavoritesBooks(Index, Count);
IEnumerable<Book> someBooks = result.books;
books.Clear();
favoriteBooks.Clear();
foreach (var b in someBooks.Select(b => new BookVM(b)))
{
favoriteBooks.Add(b);
}
OnPropertyChanged(nameof(AllFavoriteBooks));
}
private async Task AddToFavorites(BookVM bookVM)
{
var book = await Model.GetBookById(bookVM.Id);
await Model.AddToFavorites(book.Id);
await GetFavoriteBooks();
} }
private async Task GetCurrentLoans() private async Task GetCurrentLoans()

Loading…
Cancel
Save