début de gestion des filtres

master
Lucas EVARD 2 years ago
parent 163af17da5
commit 90e4ffdcb0

@ -9,9 +9,7 @@ public partial class AppShell : Shell
Routing.RegisterRoute("SharePage", typeof(SharePage));
Routing.RegisterRoute("LaterPage", typeof(LaterPage));
Routing.RegisterRoute("LikePage", typeof(LikePage));
Routing.RegisterRoute("Auteur", typeof(SharePage));
Routing.RegisterRoute("DatePublic", typeof(DatePublic));
Routing.RegisterRoute("MarkPage", typeof(MarkPage));
Routing.RegisterRoute("Filter", typeof(Filter));
Routing.RegisterRoute("BookDetail", typeof(BookDetail));
InitializeComponent();
}

@ -0,0 +1,49 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
using ViewModel;
namespace PocketBook.Applicative_VM
{
public class FilterVM
{
public ICommand AuthorCommand { get; private set; }
public ICommand MarkCommand { get; private set; }
public ICommand YearCommand { get; private set; }
public ICommand FilterCommand { get; private set; }
public ManagerVM Manager { get; private set; }
public FilterVM(ManagerVM manager)
{
Manager = manager;
FilterCommand = new Command<string>(option =>
{
switch (option)
{
case "Author":
AuthorCommand.Execute(null);
break;
case "Mark":
MarkCommand.Execute(null);
break;
case "Year":
YearCommand.Execute(null);
break;
}
});
AuthorCommand = new Command(() =>
{
});
YearCommand = new Command( async () =>
{
await Manager.GetDatesFromCollection();
});
}
}
}

@ -9,14 +9,14 @@ namespace PocketBook.Applicative_VM
{
public ICommand NavigateDetailPage { get; private set; }
public NavigatorVM NavigateCommandBooks { get; private set; }
public ScanMenuVM ScanMenuVM { get; private set; }
public ButtonsVM ButtonsVM { get; private set; }
public ManagerVM Manager { get; private set; }
public PaginationVM PaginationVM { get; private set; }
public LaterPageVM(NavigatorVM navigation, ManagerVM manager, ScanMenuVM scanMenuVM, PaginationVM paginationVM)
public LaterPageVM(NavigatorVM navigation, ManagerVM manager, ButtonsVM buttonsVM, PaginationVM paginationVM)
{
ScanMenuVM = scanMenuVM;
ButtonsVM = buttonsVM;
Manager = manager;
PaginationVM = paginationVM;
NavigateCommandBooks = navigation;

@ -9,12 +9,19 @@ namespace PocketBook.Applicative_VM
public class NavigatorVM
{
public ICommand Navigateto { get; private set; }
public ICommand NavigatetoFilter { get; private set; }
public FilterVM FilterVM { get; private set; }
public NavigatorVM()
public NavigatorVM(FilterVM filterVM)
{
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,7 @@ using ViewModel;
namespace PocketBook.Applicative_VM
{
public class ScanMenuVM : BaseViewModel
public class ButtonsVM : BaseViewModel
{
public ICommand ShowScanMenu { get; private set; }
public ICommand ModalISBN { get; private set; }
@ -22,7 +22,7 @@ namespace PocketBook.Applicative_VM
set => SetProperty(ref scanMenuIsVisible,value);
}
public ScanMenuVM(ManagerVM manager)
public ButtonsVM(ManagerVM manager)
{
Manager = manager;
ShowScanMenu = new Command(() =>

@ -10,14 +10,14 @@ namespace PocketBook.Applicative_VM
{
public ICommand NavigateDetailPage { get; private set; }
public NavigatorVM NavigateCommandBooks { get; private set; }
public ScanMenuVM ScanMenuVM { get; private set; }
public ButtonsVM ButtonsVM { get; private set; }
public ManagerVM Manager { get; private set; }
public PaginationVM PaginationVM { get; private set; }
public TousPageVM(NavigatorVM navigation,ManagerVM manager, ScanMenuVM scanMenuVM, PaginationVM paginationVM)
public TousPageVM(NavigatorVM navigation,ManagerVM manager, ButtonsVM buttonsVM, PaginationVM paginationVM)
{
ScanMenuVM = scanMenuVM;
ButtonsVM = buttonsVM;
Manager = manager;
PaginationVM = paginationVM;
Manager.LoadBooksFromManager();

@ -45,7 +45,7 @@ public static class MauiProgram
.AddSingleton<ILibraryManager, LibraryStub>()
.AddSingleton<IUserLibraryManager, UserLibraryStub>()
.AddSingleton<NavigatorVM>()
.AddSingleton<ScanMenuVM>()
.AddSingleton<ButtonsVM>()
.AddSingleton<TousPageVM>()
.AddSingleton<MainPage>()
.AddSingleton<TousPage>()
@ -53,14 +53,13 @@ public static class MauiProgram
.AddSingleton<DetailPageVM>()
.AddSingleton<PaginationVM>()
.AddSingleton<LaterPageVM>()
.AddSingleton<DatePublic>()
.AddSingleton<LikePage>()
.AddSingleton<LaterPage>()
.AddSingleton<MarkPage>()
.AddSingleton<FilterVM>()
.AddSingleton<SharePage>()
.AddSingleton<ManagerVM>()
.AddSingleton<StatutPage>()
.AddSingleton<Auteur>()
.AddSingleton<Filter>()
;
#if DEBUG
builder.Logging.AddDebug();

@ -1,58 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="PocketBook.Auteur"
Title="Auteur"
xmlns:local="clr-namespace:PocketBook"
xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit">
<Grid RowDefinitions="auto,auto,*">
<StackLayout Orientation="Vertical">
<StackLayout Orientation="Horizontal" VerticalOptions="Start" Padding="5,10,0,10">
<StackLayout Orientation="Horizontal" HorizontalOptions="StartAndExpand">
<Image Source="chevron_left.png">
<Image.Behaviors>
<toolkit:IconTintColorBehavior TintColor="{StaticResource Primary}" />
</Image.Behaviors>
</Image>
<Label Style="{StaticResource TitleLabelLeftStyle}" Text="Mes livres" />
</StackLayout>
<Label Style="{StaticResource TitleLabelStyle}" Text="Auteur" />
<ImageButton x:Name="imageArrows" Style="{StaticResource RightIconToolBar}" Source="arrows.png">
<ImageButton.Behaviors>
<toolkit:IconTintColorBehavior TintColor="{StaticResource Primary}"/>
</ImageButton.Behaviors>
</ImageButton>
</StackLayout>
<Line BackgroundColor="{StaticResource LineColorAutor}" />
</StackLayout>
<SearchBar Grid.Row="1" x:Name="searchBar" Style="{StaticResource SearchBarStyle}" Placeholder="Rechercher" />
<ScrollView Grid.Row="2">
<StackLayout>
<local:Filtrage Dataname="Alain Damasio" Margin="0,0,0,5" NumberData="2"/>
<Line Style="{StaticResource LineStyle}"/>
<local:Filtrage Dataname="Cixin Lui" Margin="0,0,0,5" NumberData="3"/>
<Line Style="{StaticResource LineStyle}"/>
<local:Filtrage Dataname="Daniel Pennac" Margin="0,0,0,5" NumberData="2"/>
<Line Style="{StaticResource LineStyle}"/>
<local:Filtrage Dataname="Evgenij Ivanovic Zamâtin" Margin="0,0,0,5" NumberData="1"/>
<Line Style="{StaticResource LineStyle}"/>
<local:Filtrage Dataname="Frank Herbert" Margin="0,0,0,5" NumberData="6"/>
<Line Style="{StaticResource LineStyle}"/>
<local:Filtrage Dataname="Herbert George Wells" Margin="0,0,0,5" NumberData="3"/>
<Line Style="{StaticResource LineStyle}"/>
<local:Filtrage Dataname="James S. A. Corey" Margin="0,0,0,5" NumberData="6"/>
<Line Style="{StaticResource LineStyle}"/>
<local:Filtrage Dataname="James Tynion" Margin="0,0,0,5" NumberData="1"/>
<Line Style="{StaticResource LineStyle}"/>
<local:Filtrage Dataname="James Tynion (IV)" Margin="0,0,0,5" NumberData="1"/>
<Line Style="{StaticResource LineStyle}"/>
<local:Filtrage Dataname="Ken Kesey" Margin="0,0,0,5" NumberData="1"/>
<Line Style="{StaticResource LineStyle}"/>
<local:Filtrage Dataname="Ken Liu" Margin="0,0,0,5" NumberData="1"/>
</StackLayout>
</ScrollView>
</Grid>
</ContentPage>

@ -1,15 +0,0 @@
using PocketBook.Applicative_VM;
namespace PocketBook;
public partial class Auteur : ContentPage
{
public NavigatorVM NavigateCommandBooks { get; private set; }
public Auteur(NavigatorVM navigator)
{
NavigateCommandBooks = navigator;
InitializeComponent();
}
}

@ -1,63 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="PocketBook.DatePublic"
xmlns:local="clr-namespace:PocketBook"
xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit">
<Grid RowDefinitions="auto,auto, *">
<StackLayout Orientation="Vertical">
<StackLayout Orientation="Horizontal" VerticalOptions="Start" Padding="5,10,0,10">
<StackLayout Orientation="Horizontal" HorizontalOptions="StartAndExpand">
<Image Source="chevron_left.png">
<Image.Behaviors>
<toolkit:IconTintColorBehavior TintColor="{StaticResource Primary}"/>
</Image.Behaviors>
</Image>
</StackLayout>
<Label Text="Date de publication" Style="{StaticResource TitleLabelStyle}"/>
<ImageButton x:Name="imageArrows" Style="{StaticResource RightIconToolBar}" Source="arrows.png">
<ImageButton.Behaviors>
<toolkit:IconTintColorBehavior TintColor="{StaticResource Primary}"/>
</ImageButton.Behaviors>
</ImageButton>
</StackLayout>
<Line BackgroundColor="{StaticResource LineColor1}"/>
</StackLayout>
<SearchBar Style="{StaticResource SearchBarStyle}"/>
<ScrollView Grid.Row="2">
<StackLayout>
<local:Filtrage Dataname="2022" Margin="0,0,0,5" NumberData="1"/>
<Line Style="{StaticResource LineStyle}"/>
<local:Filtrage Dataname="2021" Margin="0,0,0,5" NumberData="6"/>
<Line Style="{StaticResource LineStyle}"/>
<local:Filtrage Dataname="2020" Margin="0,0,0,5" NumberData="6"/>
<Line Style="{StaticResource LineStyle}"/>
<local:Filtrage Dataname="2019" Margin="0,0,0,5" NumberData="3"/>
<Line Style="{StaticResource LineStyle}"/>
<local:Filtrage Dataname="2018" Margin="0,0,0,5" NumberData="2"/>
<Line Style="{StaticResource LineStyle}"/>
<local:Filtrage Dataname="2016" Margin="0,0,0,5" NumberData="4"/>
<Line Style="{StaticResource LineStyle}"/>
<local:Filtrage Dataname="2015" Margin="0,0,0,5" NumberData="4"/>
<Line Style="{StaticResource LineStyle}"/>
<local:Filtrage Dataname="2012" Margin="0,0,0,5" NumberData="1"/>
<Line Style="{StaticResource LineStyle}"/>
<local:Filtrage Dataname="2010" Margin="0,0,0,5" NumberData="1"/>
<Line Style="{StaticResource LineStyle}"/>
<local:Filtrage Dataname="2004" Margin="0,0,0,5" NumberData="1"/>
<Line Style="{StaticResource LineStyle}"/>
<local:Filtrage Dataname="1997" Margin="0,0,0,5" NumberData="1"/>
</StackLayout>
</ScrollView>
</Grid>
</ContentPage>

@ -1,15 +0,0 @@
using PocketBook.Applicative_VM;
namespace PocketBook;
public partial class DatePublic : ContentPage
{
public NavigatorVM NavigateCommandBooks { get; private set; }
public DatePublic(NavigatorVM navigator)
{
NavigateCommandBooks = navigator;
InitializeComponent();
}
}

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="PocketBook.Filter"
Title="Filter"
Shell.ForegroundColor="{StaticResource Primary}"
xmlns:local="clr-namespace:PocketBook"
xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit">
<ContentPage.Resources>
</ContentPage.Resources>
<ContentPage.ToolbarItems>
<ToolbarItem Text="Order" Priority="2"
Order="Primary" IconImageSource="arrows.png"/>
</ContentPage.ToolbarItems>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<SearchBar Grid.Row="0" x:Name="searchBar" Style="{StaticResource SearchBarStyle}" Placeholder="Rechercher" />
<ScrollView Grid.Row="1">
<StackLayout>
<CollectionView ItemsSource="{Binding FilterVM.Manager.Filters}" SelectionMode="None">
<CollectionView.ItemTemplate>
<DataTemplate>
<local:Filtrage Dataname="{Binding Item1}" Margin="0,0,0,5" NumberData="{Binding Item2}"/>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
</StackLayout>
</ScrollView>
</Grid>
</ContentPage>

@ -0,0 +1,18 @@
using PocketBook.Applicative_VM;
using ViewModel;
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)
{
FilterVM=filterVM;
NavigateCommandBooks = navigator;
InitializeComponent();
BindingContext = this;
}
}

@ -59,14 +59,14 @@
<Line BackgroundColor="{StaticResource LineColor1}"/>
<StackLayout Background="{StaticResource BackgroundMainPage}">
<local:ContentViewFilter Command="{Binding Navigateto}" CommandParameter="Auteur" FilterImageName="person_fill.png"
<local:ContentViewFilter Command="{Binding NavigatetoFilter}" CommandParameter="Year" FilterImageName="person_fill.png"
FilterName="Auteur"/>
<Line Style="{StaticResource LineStyle2}"/>
<local:ContentViewFilter Command="{Binding Navigateto}" CommandParameter="DatePublic" FilterImageName="cal.png"
<local:ContentViewFilter Command="{Binding NavigatetoFilter}" CommandParameter="Year" FilterImageName="cal.png"
FilterName="Date de publication"/>
<Line Style="{StaticResource LineStyle2}"/>
<local:ContentViewFilter Command="{Binding Navigateto}" CommandParameter="MarkPage" FilterImageName="sparkles.png"
<local:ContentViewFilter Command="{Binding NavigatetoFilter}" CommandParameter="Year" FilterImageName="sparkles.png"
FilterName="Note"/>
</StackLayout>
</VerticalStackLayout>

@ -1,44 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="PocketBook.MarkPage"
xmlns:local="clr-namespace:PocketBook"
xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit">
<Grid RowDefinitions="auto, *">
<StackLayout Orientation="Vertical">
<StackLayout Orientation="Horizontal" VerticalOptions="Start" Padding="5,10,0,10">
<StackLayout Orientation="Horizontal" HorizontalOptions="StartAndExpand">
<Image Source="chevron_left.png">
<Image.Behaviors>
<toolkit:IconTintColorBehavior TintColor="{StaticResource Primary}"/>
</Image.Behaviors>
</Image>
</StackLayout>
<Label Text="Note" Style="{StaticResource TitleLabelStyle}"/>
<ImageButton x:Name="imageArrows" Style="{StaticResource RightIconToolBar}" Source="arrows.png">
<ImageButton.Behaviors>
<toolkit:IconTintColorBehavior TintColor="{StaticResource Primary}"/>
</ImageButton.Behaviors>
</ImageButton>
</StackLayout>
<Line BackgroundColor="{StaticResource LineColor1}"/>
</StackLayout>
<ScrollView Grid.Row="2">
<StackLayout>
<local:Filtrage Dataname="★" Margin="0,0,0,5" NumberData="1"/>
<Line Style="{StaticResource LineStyle}"/>
<local:Filtrage Dataname="★★" Margin="0,0,0,5" NumberData="6"/>
<Line Style="{StaticResource LineStyle}"/>
<local:Filtrage Dataname="★★★" Margin="0,0,0,5" NumberData="6"/>
<Line Style="{StaticResource LineStyle}"/>
<local:Filtrage Dataname="★★★★" Margin="0,0,0,5" NumberData="3"/>
<Line Style="{StaticResource LineStyle}"/>
<local:Filtrage Dataname="★★★★★" Margin="0,0,0,5" NumberData="2"/>
</StackLayout>
</ScrollView>
</Grid>
</ContentPage>

@ -1,15 +0,0 @@
using CommunityToolkit.Maui.Views;
using PocketBook.Applicative_VM;
namespace PocketBook;
public partial class MarkPage : ContentPage
{
public NavigatorVM NavigateCommandBooks { get; private set; }
public MarkPage(NavigatorVM navigator)
{
NavigateCommandBooks = navigator;
InitializeComponent();
}
}

@ -13,13 +13,13 @@
<ContentPage.ToolbarItems>
<ToolbarItem Text="Ajouter" Priority="1"
Order="Primary" IconImageSource="plus.png" Command="{Binding TousPageVM.ScanMenuVM.ShowScanMenu}"/>
Order="Primary" IconImageSource="plus.png" Command="{Binding TousPageVM.ButtonsVM.ShowScanMenu}"/>
<ToolbarItem Text="Order" Priority="2"
Order="Primary" IconImageSource="arrows.png"/>
</ContentPage.ToolbarItems>
<AbsoluteLayout>
<local:ScanMenuView Command="{Binding TousPageVM.ScanMenuVM.ModalISBN}" x:Name="scanMenu" IsVisible="{Binding TousPageVM.ScanMenuVM.ScanMenuIsVisible}"
<local:ScanMenuView Command="{Binding TousPageVM.ButtonsVM.ModalISBN}" x:Name="scanMenu" IsVisible="{Binding TousPageVM.ButtonsVM.ScanMenuIsVisible}"
Margin="0, 8, 8, 0"
AbsoluteLayout.LayoutBounds="1, 0"
AbsoluteLayout.LayoutFlags="PositionProportional" ZIndex="1"/>

@ -59,7 +59,7 @@
<MauiXaml Update="Pages\Composants\ContentView\TitledAuthor.xaml">
<Generator>MSBuild:Compile</Generator>
</MauiXaml>
<MauiXaml Update="Pages\Auteur.xaml">
<MauiXaml Update="Pages\Filter.xaml">
<Generator>MSBuild:Compile</Generator>
</MauiXaml>
<MauiXaml Update="Pages\Composants\ContentView\BookChange.xaml">
@ -80,9 +80,6 @@
<MauiXaml Update="Pages\LikePage.xaml">
<Generator>MSBuild:Compile</Generator>
</MauiXaml>
<MauiXaml Update="Pages\MarkPage.xaml">
<Generator>MSBuild:Compile</Generator>
</MauiXaml>
<MauiXaml Update="NewContent1.xaml">
<Generator>MSBuild:Compile</Generator>
</MauiXaml>
@ -204,13 +201,13 @@
<MauiImage Include="Resources\Images\tray_second.svg" />
</ItemGroup>
<ItemGroup>
<Compile Update="Pages\Filter.xaml.cs">
<DependentUpon>Filter.xaml</DependentUpon>
</Compile>
<Compile Update="Pages\StatutPage.xaml.cs">
<DependentUpon>StatutPage.xaml</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<Folder Include="Applicative_VM\" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\MyToolkitMVVM\MyToolkitMVVM.csproj" />
<ProjectReference Include="..\ViewModel\ViewModel.csproj" />

@ -32,6 +32,12 @@ namespace ViewModel
set => SetProperty(Model.PublishDate, value, v => Model.PublishDate = v);
}
public string Annee
{
get => Model.PublishDate.ToString("yyyy");
set { }
}
public Languages Language
{
get => Model.Language;

@ -8,13 +8,13 @@ using MyToolkitMVVM;
public class ManagerVM : BaseViewModel<Manager>
{
public ReadOnlyObservableCollection<BookVM> Books { get; set; }
private readonly ObservableCollection<BookVM> books = new ObservableCollection<BookVM>();
public RelayCommand<string> LoadBooks { get; private set; }
public IEnumerable<IGrouping<string, BookVM>> GroupedBooks => books.GroupBy(b => b.BookFirstAuthor).OrderBy(group => group.Key);
public IEnumerable<IGrouping<string, BookVM>> GroupedLaterBooks => books.Where(book => book.BookStatus == Status.ToBeRead).GroupBy(book => book.BookFirstAuthor).OrderBy(group => group.Key);
public ReadOnlyObservableCollection<Tuple<string, int>> Filters { get; private set; }
private readonly ObservableCollection<Tuple<string, int>> filters = new ObservableCollection<Tuple<string, int>>();
public BookVM SelectedBook
{
get => selectedBook;
@ -56,6 +56,28 @@ public class ManagerVM : BaseViewModel<Manager>
Refresh();
}
public async Task GetDatesFromCollection()
{
var result = await Model.GetBooksFromCollection(0, 1000);
IEnumerable<BookVM> resAuthors = result.books.Select(b => new BookVM(b));
var groupedBooksByDate = resAuthors.GroupBy(book => book.Annee).OrderByDescending(group => group.Key);
var dates = groupedBooksByDate.Select(group =>
new Tuple<string, int>(group.Key, group.Count())
);
filters.Clear();
foreach (var date in dates)
{
filters.Add(date);
Debug.WriteLine(date);
}
OnPropertyChanged(nameof(filters));
OnPropertyChanged(nameof(Filters));
}
public void ChangeStatut(string statut)
{
switch (statut)
@ -83,10 +105,6 @@ public class ManagerVM : BaseViewModel<Manager>
{
OnPropertyChanged(nameof(GroupedBooks));
OnPropertyChanged(nameof(GroupedLaterBooks));
OnPropertyChanged(nameof(Books));
OnPropertyChanged(nameof(books));
//NbBookLater=books.Where(book => book.BookStatus == Status.ToBeRead).Count();
//Debug.WriteLine(NbBookLater);
}
public ManagerVM(Manager model) : base(model)
@ -99,8 +117,6 @@ public class ManagerVM : BaseViewModel<Manager>
{
var result= Model.GetBookByISBN(isbn).Result;
if (result != null) {
Debug.WriteLine(result.ToString());
//books.Add(new BookVM(result));
Model.AddBookToCollection(result.Id);
LoadBooksFromManager();
Refresh();

Loading…
Cancel
Save