Filtre OK + meilleurs gestions des pages

master
Lucas Evard 2 years ago
parent e2f70f6806
commit e61ca0ad36

@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
@ -14,12 +15,19 @@ namespace PocketBook.Applicative_VM
public ICommand MarkCommand { get; private set; }
public ICommand YearCommand { get; private set; }
public ICommand FilterCommand { get; private set; }
public ICommand FilterLoadDataAuthor { get; private set; }
public ICommand FilterLoadDataYear { get; private set; }
public ICommand FilterLoadDataMark { get; private set; }
public ManagerVM Manager { get; private set; }
public FilterVM(ManagerVM manager)
public NavigatorVM Navigator { get; private set; }
public FilterVM(ManagerVM manager,NavigatorVM navigator)
{
Manager = manager;
Navigator = navigator;
string currentRoute = (Application.Current.MainPage as NavigationPage)?.CurrentPage?.ToString();
Debug.WriteLine(currentRoute);
FilterCommand = new Command<string>(option =>
{
switch (option)
@ -47,6 +55,21 @@ namespace PocketBook.Applicative_VM
{
await Manager.GetMarkFromCollection();
});
FilterLoadDataAuthor = new Command<string>(async type =>
{
Manager.Index = 0;
await Manager.GetBooksFromAuthor(type);
});
FilterLoadDataMark = new Command<string>(async type =>
{
Manager.Index = 0;
await Manager.GetBooksFromMark(type);
});
FilterLoadDataYear = new Command<string>(async type =>
{
Manager.Index = 0;
await Manager.GetBooksFromYears(type);
});
}

@ -0,0 +1,44 @@
using System;
using System.Windows.Input;
namespace PocketBook.Applicative_VM
{
public class NavigatorAndFilterVM
{
public NavigatorVM NavigateCommandBooks { get; private set; }
public FilterVM FilterVM { get; private set; }
public ICommand NavigateAndLoad { get; private set; }
public ICommand NavigateAndLoadData { get; private set; }
public string ActualTypeFilter { get; private set; }
public NavigatorAndFilterVM(FilterVM filterVM, NavigatorVM navigator)
{
NavigateCommandBooks = navigator;
FilterVM = filterVM;
NavigateAndLoad = new Command<string>(o =>
{
ActualTypeFilter = o;
FilterVM.FilterCommand.Execute(o);
NavigateCommandBooks.Navigateto.Execute("Filter");
});
NavigateAndLoadData = new Command<string>(o =>
{
switch (ActualTypeFilter)
{
case "Author":
FilterVM.FilterLoadDataAuthor.Execute(o);;
break;
case "Mark":
FilterVM.FilterLoadDataMark.Execute(o); ;
break;
case "Year":
FilterVM.FilterLoadDataYear.Execute(o); ;
break;
}
NavigateCommandBooks.Navigateto.Execute("TousPage");
});
}
}
}

@ -10,18 +10,13 @@ namespace PocketBook.Applicative_VM
{
public ICommand Navigateto { get; private set; }
public ICommand NavigatetoFilter { get; private set; }
public FilterVM FilterVM { get; private set; }
public NavigatorVM(FilterVM filterVM)
public NavigatorVM()
{
FilterVM = filterVM;
Navigateto = new Command<string>(execute:async page => {
await Shell.Current.GoToAsync(page);
});
NavigatetoFilter = new Command<string>(execute: async filtertype => {
FilterVM.FilterCommand.Execute(filtertype);
await Shell.Current.GoToAsync("Filter");
});
}
}
}

@ -8,7 +8,9 @@ namespace PocketBook.Applicative_VM
{
public class TousPageVM : BaseViewModel
{
public ICommand NavigateAndLoadData { get; private set; }
public ICommand NavigateDetailPage { get; private set; }
public NavigatorVM NavigateCommandBooks { get; private set; }
public ButtonsVM ButtonsVM { get; private set; }
public ManagerVM Manager { get; private set; }
@ -20,13 +22,18 @@ namespace PocketBook.Applicative_VM
ButtonsVM = buttonsVM;
Manager = manager;
PaginationVM = paginationVM;
Manager.LoadBooksFromManager();
NavigateCommandBooks = navigation;
//Manager.LoadBooksFromManager();
NavigateDetailPage = new Command<BookVM>(book =>
{
Manager.SelectedBook = book;
NavigateCommandBooks.Navigateto.Execute("BookDetail");
});
NavigateAndLoadData = new Command(o =>
{
Manager.LoadBooksFromManager();
NavigateCommandBooks.Navigateto.Execute("TousPage");
});
}
}

@ -48,6 +48,7 @@ public static class MauiProgram
.AddSingleton<ButtonsVM>()
.AddSingleton<TousPageVM>()
.AddSingleton<MainPage>()
.AddSingleton<NavigatorAndFilterVM>()
.AddSingleton<TousPage>()
.AddSingleton<BookDetail>()
.AddSingleton<DetailPageVM>()

@ -2,6 +2,7 @@
<ContentView xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="PocketBook.Filtrage"
x:Name="root"
xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit">
<StackLayout Margin="15,10,0,0" VerticalOptions="Start" Orientation="Horizontal">
<Image Source="book.png" WidthRequest="30">
@ -10,8 +11,8 @@
</Image.Behaviors>
</Image>
<Label VerticalOptions="Center" HorizontalOptions="StartAndExpand" Margin="15,0,0,0" x:Name="dataname"/>
<Label x:Name="numberData" FontFamily="Pro-Display-Semibold" VerticalTextAlignment="Center" TextColor="{StaticResource FontColor2}" FontSize="16"/>
<Label VerticalOptions="Center" HorizontalOptions="StartAndExpand" Margin="15,0,0,0" Text="{Binding Dataname, Source={x:Reference root}}"/>
<Label Text="{Binding NumberData, Source={x:Reference root}}" FontFamily="Pro-Display-Semibold" VerticalTextAlignment="Center" TextColor="{StaticResource FontColor2}" FontSize="16"/>
<Image Source="chevron_right.png" Scale="0.5" HorizontalOptions="End" Margin="0,0,5,0"/>
</StackLayout>
</ContentView>

@ -1,4 +1,6 @@
namespace PocketBook;
using System.Windows.Input;
namespace PocketBook;
public partial class Filtrage : ContentView
{
@ -9,6 +11,23 @@ public partial class Filtrage : ContentView
public static readonly BindableProperty NumberDataProperty =
BindableProperty.Create(nameof(NumberData), typeof(string), typeof(Filtrage), string.Empty);
public static readonly BindableProperty CommandProperty =
BindableProperty.Create(nameof(Command), typeof(ICommand), typeof(Filtrage));
public static readonly BindableProperty CommandParameterProperty =
BindableProperty.Create(nameof(CommandParameter), typeof(string), typeof(Filtrage));
public string CommandParameter
{
get { return (string)GetValue(CommandParameterProperty); }
set { SetValue(CommandParameterProperty, value); }
}
public ICommand Command
{
get { return (ICommand)GetValue(CommandProperty); }
set { SetValue(CommandProperty, value); }
}
public string Dataname
{
@ -26,8 +45,5 @@ public partial class Filtrage : ContentView
public Filtrage()
{
InitializeComponent();
dataname.SetBinding(Label.TextProperty, new Binding(nameof(Dataname), source: this));
numberData.SetBinding(Label.TextProperty, new Binding(nameof(NumberData), source: this));
}
}

@ -25,7 +25,7 @@
<ScrollView Grid.Row="1">
<StackLayout>
<CollectionView ItemsSource="{Binding FilterVM.Manager.Filters}">
<CollectionView x:Name="collection" ItemsSource="{Binding FilterVM.Manager.Filters}" SelectionMode="Single" SelectionChangedCommand="{Binding NavigateAndLoadData}" SelectionChangedCommandParameter="{Binding SelectedItem.Item1, Source={x:Reference collection}}">
<CollectionView.ItemTemplate>
<DataTemplate>
<StackLayout>

@ -5,14 +5,12 @@ namespace PocketBook;
public partial class Filter : ContentPage
{
public NavigatorVM NavigateCommandBooks { get; private set; }
public FilterVM FilterVM { get; private set; }
public Filter(NavigatorVM navigator, FilterVM filterVM)
public NavigatorAndFilterVM NavigatorAndFilterVM { get; private set; }
public Filter(NavigatorAndFilterVM navigatorAndFilterVM)
{
FilterVM=filterVM;
NavigateCommandBooks = navigator;
NavigatorAndFilterVM = navigatorAndFilterVM;
InitializeComponent();
BindingContext = this;
BindingContext = NavigatorAndFilterVM;
}
}

@ -35,23 +35,23 @@
<Line BackgroundColor="{StaticResource LineColor1}"/>
<StackLayout Background="{StaticResource BackgroundMainPage}">
<local:ContentViewFilter Command="{Binding Navigateto}" CommandParameter="TousPage" FilterImageName="tray_second_fill.png" FilterName="Tous" FilterNum="45"/>
<local:ContentViewFilter Command="{Binding TousPageVM.NavigateAndLoadData}" FilterImageName="tray_second_fill.png" FilterName="Tous" FilterNum="45"/>
<Line Style="{StaticResource LineStyle2}"/>
<local:ContentViewFilter Command="{Binding Navigateto}" CommandParameter="SharePage" FilterImageName="person_badge_clock_fill.png" FilterName="En prêt" FilterNum="1"/>
<local:ContentViewFilter Command="{Binding NavigateCommandBooks.Navigateto}" CommandParameter="SharePage" FilterImageName="person_badge_clock_fill.png" FilterName="En prêt" FilterNum="1"/>
<Line Style="{StaticResource LineStyle2}"/>
<local:ContentViewFilter Command="{Binding Navigateto}" CommandParameter="LaterPage" FilterImageName="arrow_forward.png"
<local:ContentViewFilter Command="{Binding NavigateCommandBooks.Navigateto}" CommandParameter="LaterPage" FilterImageName="arrow_forward.png"
FilterName="A lire plus tard"/>
<Line Style="{StaticResource LineStyle2}"/>
<local:ContentViewFilter Command="{Binding Navigateto}" CommandParameter="StatutPage" FilterImageName="eyeglasses.png"
<local:ContentViewFilter Command="{Binding NavigateCommandBooks.Navigateto}" CommandParameter="StatutPage" FilterImageName="eyeglasses.png"
FilterName="Statut de lecture"/>
<Line Style="{StaticResource LineStyle2}"/>
<local:ContentViewFilter Command="{Binding Navigateto}" CommandParameter="LikePage" FilterImageName="heart_fill.png"
<local:ContentViewFilter Command="{Binding NavigateCommandBooks.Navigateto}" CommandParameter="LikePage" FilterImageName="heart_fill.png"
FilterName="Favoris"/>
</StackLayout>
<Line BackgroundColor="{StaticResource LineColor1}"/>
@ -59,14 +59,14 @@
<Line BackgroundColor="{StaticResource LineColor1}"/>
<StackLayout Background="{StaticResource BackgroundMainPage}">
<local:ContentViewFilter Command="{Binding NavigatetoFilter}" CommandParameter="Author" FilterImageName="person_fill.png"
<local:ContentViewFilter Command="{Binding NavigatorAndFilterVM.NavigateAndLoad}" CommandParameter="Author" FilterImageName="person_fill.png"
FilterName="Auteur"/>
<Line Style="{StaticResource LineStyle2}"/>
<local:ContentViewFilter Command="{Binding NavigatetoFilter}" CommandParameter="Year" FilterImageName="cal.png"
<local:ContentViewFilter Command="{Binding NavigatorAndFilterVM.NavigateAndLoad}" CommandParameter="Year" FilterImageName="cal.png"
FilterName="Date de publication"/>
<Line Style="{StaticResource LineStyle2}"/>
<local:ContentViewFilter Command="{Binding NavigatetoFilter}" CommandParameter="Mark" FilterImageName="sparkles.png"
<local:ContentViewFilter Command="{Binding NavigatorAndFilterVM.NavigateAndLoad}" CommandParameter="Mark" FilterImageName="sparkles.png"
FilterName="Note"/>
</StackLayout>
</VerticalStackLayout>

@ -6,12 +6,15 @@ namespace PocketBook;
public partial class MainPage : ContentPage
{
public NavigatorVM NavigateCommandBooks { get; private set; }
public MainPage(NavigatorVM navigation)
public NavigatorAndFilterVM NavigatorAndFilterVM { get; private set; }
public TousPageVM TousPageVM { get; private set; }
public MainPage(NavigatorVM navigation, NavigatorAndFilterVM navigatorAndFilterVM, TousPageVM tousPageVM)
{
TousPageVM = tousPageVM;
NavigatorAndFilterVM = navigatorAndFilterVM;
NavigateCommandBooks = navigation;
InitializeComponent();
BindingContext = NavigateCommandBooks;
BindingContext = this;
}
}

@ -106,7 +106,9 @@ namespace ViewModel
{
BookFirstAuthor = BookAuthors.First().Name;
}
else BookFirstAuthor = "Unknown";
else {
BookFirstAuthor = "Unknown";
}
if (BookPublishers.Count() > 0)
{

@ -116,6 +116,48 @@ public class ManagerVM : BaseViewModel<Manager>
OnPropertyChanged(nameof(filters));
}
public async Task GetBooksFromAuthor(string author)
{
var result=await Model.GetBooksByAuthor(author,index,5);
NbBook = (int)result.count;
books.Clear();
foreach (Book book in result.books)
{
books.Add(new BookVM(book));
}
Refresh();
}
public async Task GetBooksFromYears(string year)
{
var result = await Model.GetBooksFromCollection(0, 1000);
NbBook = 0;
books.Clear();
foreach (Book book in result.books)
{
var bookVM = new BookVM(book);
if (bookVM.Annee == year) { books.Add(bookVM); NbBook++; }
}
Refresh();
}
public async Task GetBooksFromMark(string mark)
{
var result = await Model.GetBooksFromCollection(0, 1000);
NbBook = 0;
books.Clear();
foreach (Book book in result.books)
{
var bookVM = new BookVM(book);
if (bookVM.UserRatingString == mark) { books.Add(bookVM); NbBook++; }
}
Refresh();
}
public void ChangeStatut(string statut)
{
switch (statut)

Loading…
Cancel
Save