Update (Front-End): manque plus que les fonts
continuous-integration/drone/push Build is passing Details

pull/2/head
Louis DUFOUR 2 years ago
parent e783321960
commit a635dce3da

@ -4,25 +4,30 @@
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:BookApp"
xmlns:pages="clr-namespace:BookApp.Pages"
Shell.FlyoutBehavior="Disabled">
<TabBar>
<TabBar >
<Tab Title="My Library"
Icon="books_vertical_fill.svg">
<ShellContent ContentTemplate="{DataTemplate local:MainPage}"
Route="Mainpage"/>
<ShellContent ContentTemplate="{DataTemplate local:MainPage}" Route="Mainpage"/>
</Tab>
<Tab Title="My lists"
Icon="list_bullet.svg">
<ShellContent ContentTemplate="{DataTemplate local:Tous}"
Route="Tous"/>
<ShellContent ContentTemplate="{DataTemplate pages:EmpruntsPrets}"/>
</Tab>
<Tab Title="My Readings"
Icon="bookmark_fill.svg">
<ShellContent ContentTemplate="{DataTemplate local:Pages.DetailBook}" />
<ShellContent ContentTemplate="{DataTemplate local:MainPage}" />
</Tab>
<Tab Title="Search"
Icon="magnifyingglass.svg">
<ShellContent ContentTemplate="{DataTemplate local:Pages.Filtrage}" />
<ShellContent ContentTemplate="{DataTemplate local:MainPage}" />
</Tab>
</TabBar>
<ShellContent Route="FiltragePage" ContentTemplate="{DataTemplate pages:Filtrage}" />
<ShellContent Route="TousPage" ContentTemplate="{DataTemplate pages:Tous}" />
</Shell>

@ -1,11 +1,16 @@
namespace BookApp
using BookApp.Pages;
namespace BookApp
{
public partial class AppShell : Shell
{
public AppShell()
{
InitializeComponent();
Routing.RegisterRoute(nameof(Tous), typeof(Tous));
Routing.RegisterRoute("FiltragePage", typeof(Filtrage));
Routing.RegisterRoute("TousPage", typeof(Tous));
Routing.RegisterRoute("Mainpage", typeof(MainPage));
Routing.RegisterRoute("EmpruntsPrets", typeof(EmpruntsPrets));
}
}
}

@ -73,21 +73,18 @@
</ItemGroup>
<ItemGroup>
<Compile Update="Composants\RatingView.xaml.cs">
<DependentUpon>RatingView.xaml</DependentUpon>
</Compile>
<Compile Update="Pages\DetailBook.xaml.cs">
<DependentUpon>DetailBook.xaml</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<MauiXaml Update="Composants\RatingView.xaml">
<MauiXaml Update="Composants\CollectionFiltrage.xaml">
<Generator>MSBuild:Compile</Generator>
</MauiXaml>
<MauiXaml Update="Composants\GroupCollection.xaml">
<Generator>MSBuild:Compile</Generator>
</MauiXaml>
<MauiXaml Update="Pages\DetailBook.xaml">
<Generator>MSBuild:Compile</Generator>
</MauiXaml>
<MauiXaml Update="Pages\EmpruntsPrets.xaml">
<Generator>MSBuild:Compile</Generator>
</MauiXaml>
<MauiXaml Update="Pages\Filtrage.xaml">
<Generator>MSBuild:Compile</Generator>
</MauiXaml>

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="utf-8" ?>
<ContentView xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
x:Class="BookApp.Composants.CollectionFiltrage">
<CollectionView ItemsSource="{Binding MyCollections1}">
<CollectionView.ItemTemplate>
<DataTemplate>
<StackLayout Padding="5">
<Grid RowDefinitions="auto" Margin="5,0,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="30"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Image Grid.Column="0" HeightRequest="30"
WidthRequest="30" Source="Book.svg">
<Image.Behaviors>
<toolkit:IconTintColorBehavior TintColor="Red" />
</Image.Behaviors>
</Image>
<Label Grid.Column="1" Margin="10,0,0,0" VerticalTextAlignment="Center" Text="{Binding AuteurName}"/>
<Label Grid.Column="2" VerticalTextAlignment="Center" Margin="0,0,40,0" HorizontalTextAlignment="End" Text="{Binding NbLivre}"/>
<Button Grid.Column="2"
ImageSource="chevron_right.svg"
HeightRequest="35"
WidthRequest="35"
VerticalOptions="Center"
BackgroundColor="White"
HorizontalOptions="End"/>
</Grid>
<Rectangle Margin="45,0,0,0" HeightRequest="1" BackgroundColor="LightGray" VerticalOptions="End" />
</StackLayout>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
</ContentView>

@ -0,0 +1,44 @@
using System.Collections.ObjectModel;
namespace BookApp.Composants;
public partial class CollectionFiltrage : ContentView
{
public class ObjetTemp
{
public string AuteurName { get; set; }
public int NbLivre { get; set; }
public ObjetTemp(string name, int number)
{
AuteurName = name;
NbLivre = number;
}
}
public ObservableCollection<ObjetTemp> MyCollections1 { get; set; }
public CollectionFiltrage()
{
InitializeComponent();
MyCollections1 = new ObservableCollection<ObjetTemp>()
{
new ObjetTemp("Victor Hugo", 10),
new ObjetTemp("Jane Austen", 3),
new ObjetTemp("F. Scott Fitzgerald", 5),
new ObjetTemp("George Orwell", 4),
new ObjetTemp("Haruki Murakami", 8),
new ObjetTemp("Gabriel Garc<72>a M<>rquez", 9),
new ObjetTemp("J.K. Rowling", 9),
new ObjetTemp("Leo Tolstoy", 9),
new ObjetTemp("Ernest Hemingway", 9),
new ObjetTemp("Agatha Christie", 9),
new ObjetTemp("Mark Twain", 9),
new ObjetTemp("J.R.R. Tolkien", 9),
new ObjetTemp("William Shakespeare", 9),
new ObjetTemp("Charles Dickensn", 9),
new ObjetTemp("Isaac Asimov", 9),
};
BindingContext = this;
}
}

@ -0,0 +1,58 @@
<?xml version="1.0" encoding="utf-8" ?>
<ContentView xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:composants="clr-namespace:BookApp.Composants"
x:Class="BookApp.Composants.GroupCollection">
<CollectionView ItemsSource="{Binding AuteurGroups}" IsGrouped="True" SelectionMode="Single" SelectionChanged="OnSelectionChanged">
<CollectionView.GroupHeaderTemplate>
<DataTemplate>
<Label Text="{Binding Name}"
BackgroundColor="LightGray"
Padding="5"
Margin="15,0,0,0"
TextColor="Black"/>
</DataTemplate>
</CollectionView.GroupHeaderTemplate>
<CollectionView.ItemTemplate>
<DataTemplate>
<StackLayout>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Image Grid.Column="0"
Source="{Binding ImageBook}"
HeightRequest="125"
WidthRequest="125"
Margin="0,10,0,10"/>
<StackLayout Grid.Column="1">
<Label Text="{Binding Name}"
TextColor="Black"/>
<Label Text="{Binding Auteur.Name}"
TextColor="Black"/>
<Label
Text="{Binding Statut}"
FontAttributes="Bold"/>
<StackLayout Margin="0,10" Orientation="Horizontal" VerticalOptions="EndAndExpand">
<Image Source="empty_star.svg" WidthRequest="25" HeightRequest="25"/>
<Image Source="empty_star.svg" WidthRequest="25" HeightRequest="25"/>
<Image Source="empty_star.svg" WidthRequest="25" HeightRequest="25"/>
<Image Source="empty_star.svg" WidthRequest="25" HeightRequest="25"/>
<Image Source="empty_star.svg" WidthRequest="25" HeightRequest="25"/>
</StackLayout>
</StackLayout>
</Grid>
<Rectangle Margin="25,0,0,10" HeightRequest="1" BackgroundColor="LightGray" VerticalOptions="End" />
</StackLayout>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
</ContentView>

@ -0,0 +1,22 @@
using BookApp.Model;
using BookApp.Pages;
using BookApp.ViewModel;
namespace BookApp.Composants
{
public partial class GroupCollection : ContentView
{
public GroupCollection()
{
InitializeComponent();
}
private async void OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (e.CurrentSelection.FirstOrDefault() is Book selectedItem)
{
await Navigation.PushAsync(new DetailBook(selectedItem));
}
}
}
}

@ -1,27 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<ContentView xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:usecase="clr-namespace:BookApp.UseCase"
x:Class="BookApp.Composants.RatingView">
<ContentView.Resources>
<usecase:RatingToStarImageConverter x:Key="RatingToStarConverter"/>
</ContentView.Resources>
<StackLayout Orientation="Horizontal" HorizontalOptions="CenterAndExpand">
<StackLayout x:Name="StarsLayout" BindableLayout.ItemsSource="{Binding Rating}">
<BindableLayout.ItemTemplate>
<DataTemplate>
<Image WidthRequest="30" HeightRequest="30">
<Image.Source>
<MultiBinding Converter="{StaticResource RatingToStarConverter}">
<Binding Path="CurrentRating"/>
<Binding Path="."/>
</MultiBinding>
</Image.Source>
</Image>
</DataTemplate>
</BindableLayout.ItemTemplate>
</StackLayout>
</StackLayout>
</ContentView>

@ -1,26 +0,0 @@
using BookApp.Model;
namespace BookApp.Composants;
public partial class RatingView : ContentView
{
public static readonly BindableProperty RatingProperty = BindableProperty.Create(
nameof(Rating),
typeof(Star),
typeof(RatingView),
default(Star),
BindingMode.TwoWay
);
public Star Rating
{
get { return (Star)GetValue(RatingProperty); }
set { SetValue(RatingProperty, value); }
}
public RatingView()
{
InitializeComponent();
this.BindingContext = this;
}
}

@ -5,88 +5,194 @@ namespace BookApp.Data
{
public class Stub
{
public Book CreateBook(
string name,
string image,
Auteur auteur,
StatutDeLecture statut,
int rating,
bool favori = false,
bool next = false,
bool pret = false,
string maisonEdit = "",
string resumer = "",
int nbPage = 0,
string langue = "",
string isbn = "",
string dateAjout = "",
string link = ""
)
public ObservableCollection<Auteur> Auteurs { get; private set; } =
new ObservableCollection<Auteur>();
public ObservableCollection<Auteur> CreateStubData()
{
Book book = new Book
var victorHugo = new Auteur
{
Name = name,
ImageBook = image,
Auteur = auteur,
Statut = statut,
Note = new Star(rating),
Favori = favori,
Next = next,
Pret = pret,
MaisonEdit = maisonEdit,
Resumer = resumer,
NbPage = nbPage,
Langue = langue,
ISBN = isbn,
dateAjout = dateAjout,
Link = link
Name = "Victor Hugo",
Books = new ObservableCollection<Book>()
};
return book;
}
var georgeOrwell = new Auteur
{
Name = "George Orwell",
Books = new ObservableCollection<Book>()
};
public ObservableCollection<Book> GetStubData()
{
ObservableCollection<Book> books = new ObservableCollection<Book>
var jkRowling = new Auteur
{
CreateBook(
"La horde du contrevent",
"./Resources/Images/dotnet_bot.svg",
new Auteur { Id = 1, Name = "Alain Damasio" },
StatutDeLecture.Non_Lu,
4
),
CreateBook(
"La zone du dehors",
"./Resources/Images/dotnet_bot.svg",
new Auteur { Id = 2, Name = "Alain Damasio" },
StatutDeLecture.Lu,
5
),
CreateBook(
"L'équateur d'Einstein",
"./Resources/Images/dotnet_bot.svg",
new Auteur { Id = 3, Name = "Cixin Liu" },
StatutDeLecture.Lu,
3
),
CreateBook(
"La forêt Sombe",
"./Resources/Images/dotnet_bot.svg",
new Auteur { Id = 4, Name = "Cixin Liu" },
StatutDeLecture.Lu,
4
),
CreateBook(
"Le problème à trois corps",
"./Resources/Images/dotnet_bot.svg",
new Auteur { Id = 5, Name = "Cixin Liu" },
StatutDeLecture.Lu,
5
)
Name = "J.K. Rowling",
Books = new ObservableCollection<Book>()
};
return books;
Auteurs.Add(victorHugo);
Auteurs.Add(georgeOrwell);
Auteurs.Add(jkRowling);
AddBookToAuthor(
victorHugo,
"Les Misérables",
"dotnet_bot.svg",
new Star(5),
StatutDeLecture.Lu,
true,
false,
false,
"Grasset",
"Une épopée sur la vie de Jean Valjean...",
1232,
"Français",
"978-1234567890",
"2023-09-10",
"https://link_to_les_miserables.com"
);
AddBookToAuthor(
victorHugo,
"Notre-Dame de Paris",
"dotnet_bot.svg",
new Star(4),
StatutDeLecture.A_Lire,
false,
true,
false,
"Grasset",
"L'histoire de Quasimodo...",
940,
"Français",
"978-2345678910",
"2023-06-05",
"https://link_to_notre_dame.com"
);
AddBookToAuthor(
georgeOrwell,
"1984",
"dotnet_bot.svg",
new Star(4),
StatutDeLecture.A_Lire,
false,
true,
false,
"Penguin",
"L'histoire d'un futur dystopique...",
328,
"Anglais",
"978-9876543210",
"2023-08-01",
"https://link_to_1984.com"
);
AddBookToAuthor(
georgeOrwell,
"La Ferme des animaux",
"dotnet_bot.svg",
new Star(3),
StatutDeLecture.Non_Lu,
false,
false,
true,
"Penguin",
"Comment les animaux ont pris le pouvoir...",
112,
"Anglais",
"978-8765432109",
"2023-07-20",
"https://link_to_ferme_animaux.com"
);
AddBookToAuthor(
jkRowling,
"Harry Potter à l'école des sorciers",
"dotnet_bot.svg",
new Star(5),
StatutDeLecture.Lu,
true,
false,
false,
"Bloomsbury",
"L'aventure magique commence pour Harry...",
309,
"Anglais",
"978-7654321098",
"2023-01-15",
"https://link_to_hp_sorciers.com"
);
AddBookToAuthor(
jkRowling,
"Harry Potter et la chambre des secrets",
"dotnet_bot.svg",
new Star(5),
StatutDeLecture.Lu,
true,
false,
false,
"Bloomsbury",
"Le mystère de la Chambre des Secrets...",
341,
"Anglais",
"978-6543210987",
"2023-02-10",
"https://link_to_hp_chambre.com"
);
AddBookToAuthor(
jkRowling,
"Harry Potter et le prisonnier d'Azkaban",
"dotnet_bot.svg",
new Star(5),
StatutDeLecture.Lu,
true,
false,
false,
"Bloomsbury",
"Le danger rôde autour d'Harry...",
435,
"Anglais",
"978-5432109876",
"2023-03-05",
"https://link_to_hp_azkaban.com"
);
return Auteurs;
}
private void AddBookToAuthor(
Auteur author,
string name,
string imageBook,
Star note,
StatutDeLecture statut,
bool favori,
bool next,
bool pret,
string maisonEdit,
string resumer,
int nbPage,
string langue,
string isbn,
string dateAjout,
string link
)
{
author.Books.Add(
new Book
{
Name = name,
ImageBook = imageBook,
Auteur = author,
Note = note,
Statut = statut,
Favori = favori,
Next = next,
Pret = pret,
MaisonEdit = maisonEdit,
Resumer = resumer,
NbPage = nbPage,
Langue = langue,
ISBN = isbn,
dateAjout = dateAjout,
Link = link
}
);
}
}
}

@ -2,29 +2,48 @@
<ContentPage
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
x:Class="BookApp.MainPage">
<Shell.TitleView>
<HorizontalStackLayout VerticalOptions="Fill">
<Grid RowDefinitions="Auto">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Label
Text="Modifier"
FontFamily="Strande2"
TextColor="White"
VerticalTextAlignment="Center"
VerticalOptions="CenterAndExpand"
HeightRequest="50"
FontSize="Medium" />
</HorizontalStackLayout>
Text="Modifier"
FontFamily="Strande2"
TextColor="Red"
VerticalTextAlignment="Center"
HorizontalOptions="Start"
HeightRequest="50"
FontSize="Medium"
Grid.Column="0" />
<Image
Source="plus_icone.svg"
HorizontalOptions="End"
Margin="0,0,20,0"
Grid.Column="2">
<Image.Behaviors>
<toolkit:IconTintColorBehavior TintColor="Red" />
</Image.Behaviors>
</Image>
</Grid>
</Shell.TitleView>
<ContentPage.ToolbarItems>
<ToolbarItem IconImageSource="plus_icone.svg"/>
</ContentPage.ToolbarItems>
<Shell.BackButtonBehavior>
<BackButtonBehavior IsVisible="False" IsEnabled="False" />
</Shell.BackButtonBehavior>
<StackLayout>
<Label FontSize="35" Padding="10" FontAttributes="Bold" >Mes livres</Label>
<BoxView HeightRequest="1" BackgroundColor="#F9F9F9" VerticalOptions="End" />
<CollectionView ItemsSource="{Binding MyCollections1}" BackgroundColor="#F9F9F9">
<Rectangle HeightRequest="1" BackgroundColor="black" VerticalOptions="End" />
<CollectionView ItemsSource="{Binding MyCollections1}" Margin="25,0,0,0" BackgroundColor="#F9F9F9">
<CollectionView.ItemTemplate>
<DataTemplate>
<Grid RowDefinitions="Auto" Margin="25,0,0,0">
<Grid RowDefinitions="Auto" >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="25"/>
<ColumnDefinition Width="*"/>
@ -39,7 +58,7 @@
FontAttributes="Bold"
Padding="5"
VerticalOptions="Center"/>
<Grid Grid.Column="2" >
<Grid Grid.Column="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
@ -47,32 +66,34 @@
<Label Grid.Column="2"
Text="{Binding Number}"
FontAttributes="Bold"
Padding="5"
VerticalOptions="Center"
Margin="0,0,20,0"/>
Margin="0,0,40,0"
HorizontalOptions="End"/>
<Button Grid.Column="2"
ImageSource="chevron_right.svg"
HeightRequest="35"
WidthRequest="35"
BackgroundColor="#F9F9F9"
Clicked="OnButtonClicked"
Clicked="ButtonTous"
HorizontalOptions="End"/>
</Grid>
<BoxView Grid.ColumnSpan="4" HeightRequest="1" BackgroundColor="LightGray" VerticalOptions="End">
<BoxView.Triggers>
<DataTrigger TargetType="BoxView" Binding="{Binding IsLastItem}" Value="true">
<Rectangle Grid.ColumnSpan="4" HeightRequest="1" BackgroundColor="LightGray" VerticalOptions="End">
<Rectangle.Triggers>
<DataTrigger TargetType="Rectangle" Binding="{Binding IsLastItem}" Value="true">
<Setter Property="IsVisible" Value="False"/>
</DataTrigger>
</BoxView.Triggers>
</BoxView>
</Rectangle.Triggers>
</Rectangle>
</Grid>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
<BoxView HeightRequest="1" BackgroundColor="LightGray" VerticalOptions="End"/>
<Label FontSize="18" Padding="10" FontAttributes="Bold" >Filtres</Label>
<BoxView HeightRequest="1" BackgroundColor="LightGray" VerticalOptions="End"/>
<CollectionView ItemsSource="{Binding MyCollections2}" Margin="25,0,0,0">
<Rectangle HeightRequest="1" BackgroundColor="black" VerticalOptions="End"/>
<Label FontSize="18" Padding="15" FontAttributes="Bold">Filtres</Label>
<Rectangle HeightRequest="1" BackgroundColor="black" VerticalOptions="End"/>
<CollectionView ItemsSource="{Binding MyCollections2}" Margin="25,0,0,0" BackgroundColor="#F9F9F9">
<CollectionView.ItemTemplate>
<DataTemplate>
<Grid RowDefinitions="Auto" >
@ -96,21 +117,29 @@
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Label Grid.Column="2"
Text="{Binding Name}"
FontAttributes="Bold"
Padding="5"
VerticalOptions="Center"/>
Text="{Binding Number}"
FontAttributes="Bold"
VerticalOptions="Center"
Margin="0,0,40,0"
HorizontalOptions="End"/>
<Button Grid.Column="2"
ImageSource="chevron_right.svg"
HeightRequest="35"
WidthRequest="35"
BackgroundColor="White"
HorizontalOptions="End"/>
ImageSource="chevron_right.svg"
HeightRequest="35"
WidthRequest="35"
BackgroundColor="#F9F9F9"
Clicked="ButtonAuteur"
HorizontalOptions="End"/>
</Grid>
<Rectangle Grid.ColumnSpan="4" HeightRequest="1" BackgroundColor="LightGray" VerticalOptions="End">
<Rectangle.Triggers>
<DataTrigger TargetType="Rectangle" Binding="{Binding IsLastItem}" Value="true">
<Setter Property="IsVisible" Value="False"/>
</DataTrigger>
</Rectangle.Triggers>
</Rectangle>
</Grid>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
<BoxView HeightRequest="1" BackgroundColor="LightGray" VerticalOptions="EndAndExpand" />
</StackLayout>
</ContentPage>

@ -1,5 +1,5 @@
using System.Collections.ObjectModel;
using System.Globalization;
using BookApp.Pages;
using System.Collections.ObjectModel;
namespace BookApp
{
@ -10,17 +10,17 @@ namespace BookApp
public string Name { get; set; }
public string Icone { get; set; }
public int Number { get; set; }
public bool IsLastItem { get; set; }
public ObjetTemp(string name, string icone, int number)
public ObjetTemp(string name, string icone, int number, bool isLastItem = false)
{
Name = name;
Icone = icone;
Number = number;
IsLastItem = isLastItem;
}
}
public bool IsLastItem { get; set; } //TO DO
public ObservableCollection<ObjetTemp> MyCollections1 { get; set; }
public ObservableCollection<ObjetTemp> MyCollections2 { get; set; }
@ -29,26 +29,31 @@ namespace BookApp
InitializeComponent();
MyCollections1 = new ObservableCollection<ObjetTemp>()
{
new ObjetTemp("Item1", "./Reources/Images/tray_2_fill.svg", 250),
new ObjetTemp("Item1", "./Reources/Images/person_badge_clock_fill.svg", 250),
new ObjetTemp("Item1", "./Reources/Images/arrow_forward.svg", 250),
new ObjetTemp("Item1", "./Reources/Images/eyeglasses.svg", 250),
new ObjetTemp("Item1", "./Reources/Images/heart_fill.svg", 250),
new ObjetTemp("Item1", "./Reources/Images/tag_fill.svg", 250),
new ObjetTemp("Tous", "./Reources/Images/tray_2_fill.svg", 250),
new ObjetTemp("En prêt", "./Reources/Images/person_badge_clock_fill.svg", 250),
new ObjetTemp("À lire plus tard", "./Reources/Images/arrow_forward.svg", 250),
new ObjetTemp("Statut de lecture", "./Reources/Images/eyeglasses.svg", 250),
new ObjetTemp("Favoris", "./Reources/Images/heart_fill.svg", 250),
new ObjetTemp("Étiquettes", "./Reources/Images/tag_fill.svg", 250, true),
};
MyCollections2 = new ObservableCollection<ObjetTemp>()
{
new ObjetTemp("Item1", "./Reources/Images/person_fill.svg", 250),
new ObjetTemp("Item1", "./Reources/Images/calendar.svg", 250),
new ObjetTemp("Item1", "./Reources/Images/sparkles.svg", 250),
new ObjetTemp("Auteur", "./Reources/Images/person_fill.svg", 250),
new ObjetTemp("Date de publication", "./Reources/Images/calendar.svg", 250),
new ObjetTemp("Note", "./Reources/Images/sparkles.svg", 250, true),
};
BindingContext = this;
}
// Commande with view model pour le futur
async void OnButtonClicked(object sender, EventArgs args)
async void ButtonTous(object sender, EventArgs args)
{
await Shell.Current.GoToAsync("TousPage");
}
async void ButtonAuteur(object sender, EventArgs args)
{
await Shell.Current.GoToAsync(nameof(Tous));
await Shell.Current.GoToAsync("FiltragePage");
}
}
}

@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
@ -8,9 +9,7 @@ namespace BookApp.Model
{
public class Auteur
{
public int Id { get; set; }
public string Name { get; set; }
public Auteur() { }
public ObservableCollection<Book> Books { get; set; }
}
}

@ -1,11 +1,4 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BookApp.Model
namespace BookApp.Model
{
public class Book
{
@ -23,7 +16,6 @@ namespace BookApp.Model
public string Langue { get; set; }
public string ISBN { get; set; }
public string dateAjout { get; set; }
public string Link { get; set; }
}
}

@ -5,44 +5,71 @@
xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
x:Class="BookApp.Pages.DetailBook">
<Shell.BackButtonBehavior>
<BackButtonBehavior
IconOverride="chevron_left.svg"
TextOverride="Tous"/>
<BackButtonBehavior IsVisible="False" IsEnabled="False"/>
</Shell.BackButtonBehavior>
<Shell.TitleView>
<Label
<Grid RowDefinitions="Auto" VerticalOptions="Center">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<HorizontalStackLayout Grid.Column="0">
<Image
Source="Chevron_left.svg"
HorizontalOptions="Start">
<Image.GestureRecognizers>
<TapGestureRecognizer Tapped="BackButton" NumberOfTapsRequired="1"/>
</Image.GestureRecognizers>
<Image.Behaviors>
<toolkit:IconTintColorBehavior TintColor="Red" />
</Image.Behaviors>
</Image>
<Label
Text="Tous"
FontFamily="Strande2"
TextColor="Red"
FontSize="Medium"
VerticalTextAlignment="Center"
HorizontalOptions="Start"
Grid.Column="0" />
</HorizontalStackLayout>
<Label
Text="Détails du livre"
TextColor="White"
VerticalTextAlignment="Center"
HeightRequest="50"
FontFamily="Strande2"
TextColor="Black"
FontSize="Medium"
/>
VerticalTextAlignment="Center"
HorizontalOptions="Center"
Grid.Column="1" />
</Grid>
</Shell.TitleView>
<ContentPage.Content>
<ScrollView>
<StackLayout>
<BoxView HeightRequest="1" BackgroundColor="LightGray" VerticalOptions="End" />
<Rectangle HeightRequest="1" BackgroundColor="LightGray" VerticalOptions="End"/>
<Grid RowDefinitions="auto">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="125"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Image Grid.Column="0" Source="dotnet_bot"/>
<Image Margin="10,10,10,0" Grid.Column="0" Source="{Binding BookDetail.ImageBook}"/>
<StackLayout Grid.Column="1">
<Label FontAttributes="Bold" FontSize="20" Text="La horde du coutrevant"/>
<Label FontAttributes="Bold" FontSize="20" Text="{Binding BookDetail.Name}"/>
<Grid RowDefinitions="auto" VerticalOptions="EndAndExpand">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<StackLayout x:Name="StarLayout" Grid.Column="0" Orientation="Horizontal" HorizontalOptions="CenterAndExpand">
<StackLayout x:Name="StarLayout" Grid.Column="0" Orientation="Horizontal" HorizontalOptions="CenterAndExpand" >
<!-- Les étoiles seront ajoutées ici via le code-behind -->
</StackLayout>
<Label x:Name="RatingLabel" Grid.Column="1" FontSize="Medium" HorizontalOptions="CenterAndExpand"/>
</Grid>
</StackLayout>
</Grid>
<BoxView Margin="25,10,0,0" HeightRequest="1" BackgroundColor="LightGray" VerticalOptions="End" />
<Rectangle Margin="25,10,0,0" HeightRequest="1" BackgroundColor="LightGray" VerticalOptions="End"/>
<Grid>
<Label FontAttributes="Bold" Margin="25,0,0,0" VerticalTextAlignment="Center" Text="Info en ligne"/>
<Button Grid.Column="1"
@ -52,16 +79,16 @@
BackgroundColor="White"
HorizontalOptions="End"/>
</Grid>
<BoxView Margin="25,0,0,10" HeightRequest="1" BackgroundColor="LightGray" VerticalOptions="End" />
<Rectangle Margin="25,0,0,10" HeightRequest="1" BackgroundColor="LightGray" VerticalOptions="End"/>
<Label FontAttributes="Bold" Margin="25,0,0,0" VerticalTextAlignment="Center" Text="Auteur"/>
<Label Margin="25,0,0,0" VerticalTextAlignment="Center" Text="Alain Damasio"/>
<BoxView Margin="25,10,0,10" HeightRequest="1" BackgroundColor="LightGray" VerticalOptions="End" />
<Label Margin="25,0,0,0" VerticalTextAlignment="Center" Text="{Binding BookDetail.Auteur.Name}"/>
<Rectangle Margin="25,10,0,10" HeightRequest="1" BackgroundColor="LightGray" VerticalOptions="End"/>
<Label FontAttributes="Bold" Margin="25,0,0,0" VerticalTextAlignment="Center" Text="Maison d'édition"/>
<Label Margin="25,0,0,0" VerticalTextAlignment="Center" Text="Gallimard (2015)"/>
<BoxView Margin="25,10,0,10" HeightRequest="1" BackgroundColor="LightGray" VerticalOptions="End" />
<Label Margin="25,0,0,0" VerticalTextAlignment="Center" Text="{Binding BookDetail.MaisonEdit}"/>
<Rectangle Margin="25,10,0,10" HeightRequest="1" BackgroundColor="LightGray" VerticalOptions="End"/>
<Label FontAttributes="Bold" Margin="25,0,0,0" VerticalTextAlignment="Center" Text="Résumer"/>
<Label Margin="25,0,0,0" VerticalTextAlignment="Center" Text="Le Lorem Ipsum est simplement du faux texte employé dans la composition et la mise en page avant impression. Le Lorem Ipsum est le faux texte standard de l'imprimerie depuis les années 1500, quand un imprimeur anonyme assembla ensemble des morceaux de texte pour réaliser un livre spécimen de polices de texte. Il n'a pas fait que survivre cinq siècles, mais s'est aussi adapté à la bureautique informatique, sans que son contenu n'en soit modifié. Il a été popularisé dans les années 1960 grâce à la vente de feuilles Letraset contenant des passages du Lorem Ipsum, et, plus récemment, par son inclusion dans des applications de mise en page de texte, comme Aldus PageMaker."/>
<BoxView Margin="25,10,0,10" HeightRequest="1" BackgroundColor="LightGray" VerticalOptions="End" />
<Rectangle Margin="25,10,0,10" HeightRequest="1" BackgroundColor="LightGray" VerticalOptions="End" />
<Label FontAttributes="Bold" Margin="25,0,0,0" VerticalTextAlignment="Center" Text="Details"/>
<Grid Margin="25,0,20,0">
<Grid.RowDefinitions>
@ -74,13 +101,13 @@
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Label Grid.Row="0" Grid.Column="0" Text="Nombre de pages"/>
<Label Grid.Row="0" Grid.Column="1" HorizontalTextAlignment="End" Text="500"/>
<Label Grid.Row="0" Grid.Column="1" HorizontalTextAlignment="End" Text="{Binding BookDetail.NbPage}"/>
<Label Grid.Row="1" Grid.Column="0" Text="Langue"/>
<Label Grid.Row="1" Grid.Column="1" HorizontalTextAlignment="End" Text="Français"/>
<Label Grid.Row="1" Grid.Column="1" HorizontalTextAlignment="End" Text="{Binding BookDetail.Langue}"/>
<Label Grid.Row="2" Grid.Column="0" Text="ISBN"/>
<Label Grid.Row="2" Grid.Column="1" HorizontalTextAlignment="End" Text="48084095208"/>
<Label Grid.Row="2" Grid.Column="1" HorizontalTextAlignment="End" Text="{Binding BookDetail.ISBN}"/>
</Grid>
<BoxView Margin="25,10,0,10" HeightRequest="1" BackgroundColor="LightGray" VerticalOptions="End" />
<Rectangle Margin="25,10,0,10" HeightRequest="1" BackgroundColor="LightGray" VerticalOptions="End" />
<Label FontAttributes="Bold" Margin="25,0,0,0" VerticalTextAlignment="Center" Text="Status de lecture"/>
<Grid RowDefinitions="auto" Margin="25,0,20,0">
<Grid.ColumnDefinitions>
@ -88,9 +115,9 @@
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Label Grid.Column="0" Text="Status"/>
<Label Grid.Column="1" HorizontalTextAlignment="End" Text="non lu"/>
<Label Grid.Column="1" HorizontalTextAlignment="End" Text="{Binding BookDetail.Statut}"/>
</Grid>
<BoxView Margin="25,10,0,10" HeightRequest="1" BackgroundColor="LightGray" VerticalOptions="End" />
<Rectangle Margin="25,10,0,10" HeightRequest="1" BackgroundColor="LightGray" VerticalOptions="End" />
<Label FontAttributes="Bold" Margin="25,0,0,0" VerticalTextAlignment="Center" Text="biliothèque"/>
<Grid RowDefinitions="auto" Margin="25,0,20,0">
<Grid.ColumnDefinitions>
@ -98,9 +125,11 @@
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Label Grid.Column="0" Text="Ajouter le"/>
<Label Grid.Column="1" HorizontalTextAlignment="End" Text="10 aout 2023"/>
<Label Grid.Column="1" HorizontalTextAlignment="End" Text="{Binding BookDetail.dateAjout}"/>
</Grid>
<BoxView Margin="25,10,0,10" HeightRequest="1" BackgroundColor="LightGray" VerticalOptions="End" />
<Rectangle Margin="25,10,0,10" HeightRequest="1" BackgroundColor="LightGray" VerticalOptions="End" />
<Rectangle HeightRequest="100" Fill="Transparent"/>
<Rectangle Margin="25,10,0,10" HeightRequest="1" BackgroundColor="LightGray" VerticalOptions="End" />
<Grid RowDefinitions="auto" Margin="25,0,20,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="25"/>
@ -114,7 +143,7 @@
</Image>
<Label Margin="10,0,0,0" VerticalOptions="Center" Grid.Column="1" TextColor="Red" Text="Déplacer le livre"/>
</Grid>
<BoxView Margin="25,10,0,10" HeightRequest="1" BackgroundColor="LightGray" VerticalOptions="End" />
<Rectangle Margin="25,10,0,10" HeightRequest="1" BackgroundColor="LightGray" VerticalOptions="End" />
<Grid RowDefinitions="auto" Margin="25,0,20,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="25"/>
@ -128,7 +157,7 @@
</Image>
<Label Margin="10,0,0,0" VerticalOptions="Center" Grid.Column="1" TextColor="Red" Text="Ajouter à la liste à lire plus tard"/>
</Grid>
<BoxView Margin="25,10,0,10" HeightRequest="1" BackgroundColor="LightGray" VerticalOptions="End" />
<Rectangle Margin="25,10,0,10" HeightRequest="1" BackgroundColor="LightGray" VerticalOptions="End" />
<Grid RowDefinitions="auto" Margin="25,0,20,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="25"/>
@ -142,7 +171,7 @@
</Image>
<Label Margin="10,0,0,0" VerticalOptions="Center" Grid.Column="1" TextColor="Red" Text="Changer le statut de lecture"/>
</Grid>
<BoxView Margin="25,10,0,10" HeightRequest="1" BackgroundColor="LightGray" VerticalOptions="End" />
<Rectangle Margin="25,10,0,10" HeightRequest="1" BackgroundColor="LightGray" VerticalOptions="End" />
<Grid RowDefinitions="auto" Margin="25,0,20,20">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="25"/>
@ -157,7 +186,6 @@
<Label Margin="10,0,0,0" VerticalOptions="Center" Grid.Column="1" TextColor="Red" Text="Prêter le livre"/>
</Grid>
<BoxView HeightRequest="1" BackgroundColor="LightGray" VerticalOptions="EndAndExpand" />
<!-- Gestion Star TODO -->
</StackLayout>
</ScrollView>
</ContentPage.Content>

@ -1,3 +1,4 @@
using BookApp.Model;
using System.Collections.ObjectModel;
namespace BookApp.Pages;
@ -7,7 +8,9 @@ public partial class DetailBook : ContentPage
private int maxStars = 5;
private int currentRating = 0;
public DetailBook()
public Book BookDetail { get; set; }
public DetailBook(Book ItemBook)
{
InitializeComponent();
@ -16,8 +19,8 @@ public partial class DetailBook : ContentPage
var star = new Image
{
Source = "empty_star.svg", // image d'une étoile vide
WidthRequest = 30,
HeightRequest = 30
WidthRequest = 25,
HeightRequest = 25
};
int currentStar = i;
@ -29,7 +32,7 @@ public partial class DetailBook : ContentPage
}
UpdateStars();
BookDetail = ItemBook;
BindingContext = this;
}
@ -57,4 +60,9 @@ public partial class DetailBook : ContentPage
star.Source = "empty_star.svg";
}
}
async void BackButton(object sender, EventArgs args)
{
await Shell.Current.Navigation.PopAsync();
}
}

@ -0,0 +1,100 @@
<?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="BookApp.Pages.EmpruntsPrets"
xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
Title="EmpruntsPrets">
<Shell.BackButtonBehavior>
<BackButtonBehavior IsVisible="False" IsEnabled="False"/>
</Shell.BackButtonBehavior>
<Shell.TitleView>
<Grid RowDefinitions="Auto" VerticalOptions="Center">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<HorizontalStackLayout Grid.Column="0">
<Image
Source="Chevron_left.svg"
HorizontalOptions="Start">
<Image.GestureRecognizers>
<TapGestureRecognizer Tapped="BackButton" NumberOfTapsRequired="1"/>
</Image.GestureRecognizers>
<Image.Behaviors>
<toolkit:IconTintColorBehavior TintColor="Red" />
</Image.Behaviors>
</Image>
<Label
Text="Mes livres"
FontFamily="Strande2"
TextColor="Red"
FontSize="Medium"
VerticalTextAlignment="Center"
HorizontalOptions="Start"
Grid.Column="0" />
</HorizontalStackLayout>
<Label
Text="Tous"
FontFamily="Strande2"
TextColor="Black"
FontSize="Medium"
VerticalTextAlignment="Center"
HorizontalOptions="Center"
Grid.Column="1" />
<HorizontalStackLayout Grid.Column="2">
<Image
Source="plus_icone.svg"
HorizontalOptions="End"
Margin="0,0,20,0"
Grid.Column="2">
<Image.Behaviors>
<toolkit:IconTintColorBehavior TintColor="Red" />
</Image.Behaviors>
</Image>
<Image
Source="arrow_up_arrow_down.svg"
HorizontalOptions="End"
Margin="0,0,10,0"
Grid.Column="2">
<Image.Behaviors>
<toolkit:IconTintColorBehavior TintColor="Red" />
</Image.Behaviors>
</Image>
</HorizontalStackLayout>
</Grid>
</Shell.TitleView>
<StackLayout>
<ContentView>
<ContentView.GestureRecognizers>
<TapGestureRecognizer Command="{Binding TapCommand}" NumberOfTapsRequired="1" />
</ContentView.GestureRecognizers>
<Grid WidthRequest="150" HeightRequest="50"
BackgroundColor="LightGray"
VerticalOptions="Center"
HorizontalOptions="Center">
<!-- Le Switch -->
<Switch x:Name="MySwitch" IsToggled="{Binding IsToggled}"
HorizontalOptions="Start"
VerticalOptions="Center"/>
<!-- Le Texte -->
<Label Text="Mon Switch"
VerticalOptions="Center"
HorizontalOptions="Center"
FontSize="16"
TextColor="Black" />
</Grid>
</ContentView>
<!-- TODO with collection group on personn -->
</StackLayout>
</ContentPage>

@ -0,0 +1,35 @@
using System.Windows.Input;
namespace BookApp.Pages;
public partial class EmpruntsPrets : ContentPage
{
public ICommand TapCommand => new Command(ToggleSwitch);
private bool _isToggled;
public bool IsToggled
{
get => _isToggled;
set
{
_isToggled = value;
OnPropertyChanged();
}
}
public EmpruntsPrets()
{
InitializeComponent();
}
async void BackButton(object sender, EventArgs args)
{
await Shell.Current.Navigation.PopAsync();
}
private void ToggleSwitch()
{
IsToggled = !IsToggled;
}
}

@ -3,64 +3,68 @@
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
x:Class="BookApp.Pages.Filtrage"
Title="Filtrage">
xmlns:composants="clr-namespace:BookApp.Composants"
x:Class="BookApp.Pages.Filtrage">
<Shell.BackButtonBehavior>
<BackButtonBehavior
IconOverride="chevron_left.svg"
TextOverride="Tous"/>
<BackButtonBehavior IsVisible="False" IsEnabled="False"/>
</Shell.BackButtonBehavior>
<Shell.TitleView>
<Label
Text="{Binding TitleSection}"
FontFamily="Strande2"
TextColor="White"
VerticalTextAlignment="Center"
VerticalOptions="CenterAndExpand"
HeightRequest="50"
FontSize="Medium"
HorizontalTextAlignment="Center"/>
<!-- Date de publication ou auteur -->
<Grid RowDefinitions="Auto" VerticalOptions="Center">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<HorizontalStackLayout Grid.Column="0">
<Image
Source="Chevron_left.svg"
HorizontalOptions="Start">
<Image.GestureRecognizers>
<TapGestureRecognizer Tapped="BackButton" NumberOfTapsRequired="1"/>
</Image.GestureRecognizers>
<Image.Behaviors>
<toolkit:IconTintColorBehavior TintColor="Red" />
</Image.Behaviors>
</Image>
<Label
Text="Auteur"
FontFamily="Strande2"
TextColor="Red"
FontSize="Medium"
VerticalTextAlignment="Center"
HorizontalOptions="Start"
Grid.Column="0" />
</HorizontalStackLayout>
<Label
Text="Tous"
FontFamily="Strande2"
TextColor="Black"
FontSize="Medium"
VerticalTextAlignment="Center"
HorizontalOptions="Center"
Grid.Column="1" />
<HorizontalStackLayout Grid.Column="2">
<Image
Source="arrow_up_arrow_down.svg"
HorizontalOptions="End"
Margin="0,0,10,0"
Grid.Column="2">
<Image.Behaviors>
<toolkit:IconTintColorBehavior TintColor="Red" />
</Image.Behaviors>
</Image>
</HorizontalStackLayout>
</Grid>
</Shell.TitleView>
<ContentPage.ToolbarItems>
<ToolbarItem IconImageSource="arrow_up_arrow_down.svg" Priority="1" Order="Primary" />
</ContentPage.ToolbarItems>
<ContentPage.Content>
<StackLayout>
<BoxView HeightRequest="1" BackgroundColor="LightGray"/>
<SearchBar Placeholder="Search items..." />
<BoxView HeightRequest="1" BackgroundColor="LightGray"/>
<CollectionView ItemsSource="{Binding BookCollection}">
<CollectionView.ItemTemplate>
<DataTemplate>
<StackLayout Padding="5">
<Grid RowDefinitions="auto" Margin="5,0,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="30"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Image Grid.Column="0" HeightRequest="30"
WidthRequest="30" Source="Book.svg">
<Image.Behaviors>
<toolkit:IconTintColorBehavior TintColor="Red" />
</Image.Behaviors>
</Image>
<Label Grid.Column="1" Margin="10,0,0,0" VerticalTextAlignment="Center" Text="LALALA"/>
<Label Grid.Column="2" VerticalTextAlignment="Center" Margin="0,0,40,0" HorizontalTextAlignment="End" Text="100"/>
<Button Grid.Column="2"
ImageSource="chevron_right.svg"
HeightRequest="35"
WidthRequest="35"
VerticalOptions="Center"
BackgroundColor="White"
HorizontalOptions="End"/>
</Grid>
<BoxView Margin="45,0,0,0" HeightRequest="1" BackgroundColor="LightGray" VerticalOptions="End" />
</StackLayout>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
<Rectangle HeightRequest="1" BackgroundColor="LightGray"/>
<SearchBar Placeholder="Search items..."/>
<Rectangle HeightRequest="1" BackgroundColor="LightGray"/>
<composants:CollectionFiltrage VerticalOptions="FillAndExpand"/>
</StackLayout>
</ContentPage.Content>
</ContentPage>

@ -1,15 +1,19 @@
using BookApp.ViewModel;
namespace BookApp.Pages;
public partial class Filtrage : ContentPage
namespace BookApp.Pages
{
SearchBar searchBar = new SearchBar { Placeholder = "Search items..." };
public TousViewModel Data = new TousViewModel();
public Filtrage()
public partial class Filtrage : ContentPage
{
InitializeComponent();
BindingContext = Data;
SearchBar searchBar = new SearchBar { Placeholder = "Search items..." };
public Filtrage()
{
InitializeComponent();
}
async void BackButton(object sender, EventArgs args)
{
await Shell.Current.Navigation.PopAsync();
}
}
}

@ -2,73 +2,74 @@
<ContentPage
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:usecase="clr-namespace:BookApp.UseCase"
xmlns:composants="clr-namespace:BookApp.Composants"
x:Class="BookApp.Tous">
xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
x:Class="BookApp.Pages.Tous">
<Shell.BackButtonBehavior>
<BackButtonBehavior IsVisible="False" IsEnabled="False"/>
</Shell.BackButtonBehavior>
<Shell.TitleView>
<Label
Text="Tous"
FontFamily="Strande2"
TextColor="White"
VerticalTextAlignment="Center"
VerticalOptions="CenterAndExpand"
HeightRequest="50"
FontSize="Medium"
HorizontalTextAlignment="Center"/>
</Shell.TitleView>
<ContentPage.Content>
<CollectionView ItemsSource="{Binding BookCollection}">
<CollectionView.ItemTemplate>
<DataTemplate>
<StackLayout>
<Grid>
<!-- Arrière-plan avec BoxView -->
<BoxView Color="LightGray" />
<!-- Label par-dessus le BoxView -->
<Label Text="{Binding Auteur.Name}"
Padding="5"
Margin="15,0,0,0"
TextColor="Black" />
</Grid>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Image Grid.Column="0"
Source="{Binding ImageBook}"
HeightRequest="125"
WidthRequest="125"
Margin="0,10,0,10"/>
<StackLayout Grid.Column="1">
<Label Text="{Binding Name}"
<Grid RowDefinitions="Auto" VerticalOptions="Center">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<HorizontalStackLayout Grid.Column="0">
<Image
Source="Chevron_left.svg"
HorizontalOptions="Start">
<Image.GestureRecognizers>
<TapGestureRecognizer Tapped="BackButton" NumberOfTapsRequired="1"/>
</Image.GestureRecognizers>
<Image.Behaviors>
<toolkit:IconTintColorBehavior TintColor="Red" />
</Image.Behaviors>
</Image>
<Label
Text="Mes livres"
FontFamily="Strande2"
TextColor="Red"
FontSize="Medium"
VerticalTextAlignment="Center"
HorizontalOptions="Start"
Grid.Column="0" />
</HorizontalStackLayout>
TextColor="Black"/>
<Label Text="{Binding Auteur.Name}"
<Label
Text="Tous"
FontFamily="Strande2"
TextColor="Black"
FontSize="Medium"
VerticalTextAlignment="Center"
HorizontalOptions="Center"
Grid.Column="1" />
TextColor="Black"/>
<Label
Text="{Binding Statut}"
FontAttributes="Bold"/>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<composants:RatingView Rating="{Binding Note.Rating}"/>
</Grid>
</StackLayout>
</Grid>
<BoxView Margin="25,0,0,10" HeightRequest="1" BackgroundColor="LightGray" VerticalOptions="End" />
</StackLayout>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
<HorizontalStackLayout Grid.Column="2">
<Image
Source="plus_icone.svg"
HorizontalOptions="End"
Margin="0,0,20,0"
Grid.Column="2">
<Image.Behaviors>
<toolkit:IconTintColorBehavior TintColor="Red" />
</Image.Behaviors>
</Image>
<Image
Source="arrow_up_arrow_down.svg"
HorizontalOptions="End"
Margin="0,0,10,0"
Grid.Column="2">
<Image.Behaviors>
<toolkit:IconTintColorBehavior TintColor="Red" />
</Image.Behaviors>
</Image>
</HorizontalStackLayout>
</Grid>
</Shell.TitleView>
<ContentPage.Content>
<composants:GroupCollection/>
</ContentPage.Content>
</ContentPage>

@ -1,7 +1,6 @@
using BookApp.Model;
using BookApp.ViewModel;
using BookApp.ViewModel;
namespace BookApp
namespace BookApp.Pages
{
public partial class Tous : ContentPage
{
@ -10,5 +9,10 @@ namespace BookApp
InitializeComponent();
BindingContext = new TousViewModel();
}
async void BackButton(object sender, EventArgs args)
{
await Shell.Current.Navigation.PopAsync();
}
}
}

@ -4,6 +4,10 @@
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml">
<Color x:Key="BackGroundApp">#F9F9F9</Color>
<Color x:Key="Primary">red</Color>
<Color x:Key="Secondary">#DFD8F7</Color>
<Color x:Key="Tertiary">#2B0B98</Color>

@ -377,7 +377,7 @@
</Style>
<Style TargetType="Shell" ApplyToDerivedTypes="True">
<Setter Property="Shell.BackgroundColor" Value="{AppThemeBinding Light={StaticResource Primary}, Dark={StaticResource Gray950}}" />
<Setter Property="Shell.BackgroundColor" Value="{AppThemeBinding Light={StaticResource BackGroundApp}, Dark={StaticResource Gray950}}" />
<Setter Property="Shell.ForegroundColor" Value="{OnPlatform WinUI={StaticResource Primary}, Default={StaticResource White}}" />
<Setter Property="Shell.TitleColor" Value="{AppThemeBinding Light={StaticResource White}, Dark={StaticResource White}}" />
<Setter Property="Shell.DisabledColor" Value="{AppThemeBinding Light={StaticResource Gray200}, Dark={StaticResource Gray950}}" />

@ -1,32 +0,0 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BookApp.UseCase
{
public class RatingToStarImageConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
int currentRating = (int)value;
int index = System.Convert.ToInt32(parameter);
return index < currentRating
? "../Ressources/Images/filled_star.svg"
: "../Ressources/Images/empty_star.svg";
}
public object ConvertBack(
object value,
Type targetType,
object parameter,
CultureInfo culture
)
{
throw new NotImplementedException();
}
}
}

@ -6,13 +6,27 @@ namespace BookApp.ViewModel
{
public class TousViewModel
{
public ObservableCollection<Book> BookCollection { get; set; } =
new ObservableCollection<Book>();
public class AuteurGroup : ObservableCollection<Book>
{
public string Name { get; private set; }
public AuteurGroup(string name, ObservableCollection<Book> books)
: base(books)
{
Name = name;
}
}
public ObservableCollection<AuteurGroup> AuteurGroups { get; private set; } =
new ObservableCollection<AuteurGroup>();
public TousViewModel()
{
Stub stub = new Stub();
BookCollection = stub.GetStubData();
ObservableCollection<Auteur> auteurs = new Stub().CreateStubData();
foreach (Auteur auteur in auteurs)
{
AuteurGroups.Add(new AuteurGroup(auteur.Name, auteur.Books));
}
}
}
}

Loading…
Cancel
Save