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

@ -1,11 +1,16 @@
namespace BookApp using BookApp.Pages;
namespace BookApp
{ {
public partial class AppShell : Shell public partial class AppShell : Shell
{ {
public AppShell() public AppShell()
{ {
InitializeComponent(); 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>
<ItemGroup> <ItemGroup>
<Compile Update="Composants\RatingView.xaml.cs"> <MauiXaml Update="Composants\CollectionFiltrage.xaml">
<DependentUpon>RatingView.xaml</DependentUpon> <Generator>MSBuild:Compile</Generator>
</Compile> </MauiXaml>
<Compile Update="Pages\DetailBook.xaml.cs"> <MauiXaml Update="Composants\GroupCollection.xaml">
<DependentUpon>DetailBook.xaml</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<MauiXaml Update="Composants\RatingView.xaml">
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>
</MauiXaml> </MauiXaml>
<MauiXaml Update="Pages\DetailBook.xaml"> <MauiXaml Update="Pages\DetailBook.xaml">
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>
</MauiXaml> </MauiXaml>
<MauiXaml Update="Pages\EmpruntsPrets.xaml">
<Generator>MSBuild:Compile</Generator>
</MauiXaml>
<MauiXaml Update="Pages\Filtrage.xaml"> <MauiXaml Update="Pages\Filtrage.xaml">
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>
</MauiXaml> </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 class Stub
{ {
public Book CreateBook( public ObservableCollection<Auteur> Auteurs { get; private set; } =
string name, new ObservableCollection<Auteur>();
string image,
Auteur auteur, public ObservableCollection<Auteur> CreateStubData()
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 = ""
)
{ {
Book book = new Book var victorHugo = new Auteur
{ {
Name = name, Name = "Victor Hugo",
ImageBook = image, Books = new ObservableCollection<Book>()
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
}; };
return book; var georgeOrwell = new Auteur
} {
Name = "George Orwell",
Books = new ObservableCollection<Book>()
};
public ObservableCollection<Book> GetStubData() var jkRowling = new Auteur
{
ObservableCollection<Book> books = new ObservableCollection<Book>
{ {
CreateBook( Name = "J.K. Rowling",
"La horde du contrevent", Books = new ObservableCollection<Book>()
"./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
)
}; };
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 <ContentPage
xmlns="http://schemas.microsoft.com/dotnet/2021/maui" xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
x:Class="BookApp.MainPage"> x:Class="BookApp.MainPage">
<Shell.TitleView> <Shell.TitleView>
<HorizontalStackLayout VerticalOptions="Fill"> <Grid RowDefinitions="Auto">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Label <Label
Text="Modifier" Text="Modifier"
FontFamily="Strande2" FontFamily="Strande2"
TextColor="White" TextColor="Red"
VerticalTextAlignment="Center" VerticalTextAlignment="Center"
VerticalOptions="CenterAndExpand" HorizontalOptions="Start"
HeightRequest="50" HeightRequest="50"
FontSize="Medium" /> FontSize="Medium"
</HorizontalStackLayout> 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> </Shell.TitleView>
<ContentPage.ToolbarItems>
<ToolbarItem IconImageSource="plus_icone.svg"/> <Shell.BackButtonBehavior>
</ContentPage.ToolbarItems> <BackButtonBehavior IsVisible="False" IsEnabled="False" />
</Shell.BackButtonBehavior>
<StackLayout> <StackLayout>
<Label FontSize="35" Padding="10" FontAttributes="Bold" >Mes livres</Label> <Label FontSize="35" Padding="10" FontAttributes="Bold" >Mes livres</Label>
<BoxView HeightRequest="1" BackgroundColor="#F9F9F9" VerticalOptions="End" /> <Rectangle HeightRequest="1" BackgroundColor="black" VerticalOptions="End" />
<CollectionView ItemsSource="{Binding MyCollections1}" BackgroundColor="#F9F9F9"> <CollectionView ItemsSource="{Binding MyCollections1}" Margin="25,0,0,0" BackgroundColor="#F9F9F9">
<CollectionView.ItemTemplate> <CollectionView.ItemTemplate>
<DataTemplate> <DataTemplate>
<Grid RowDefinitions="Auto" Margin="25,0,0,0"> <Grid RowDefinitions="Auto" >
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="25"/> <ColumnDefinition Width="25"/>
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
@ -39,7 +58,7 @@
FontAttributes="Bold" FontAttributes="Bold"
Padding="5" Padding="5"
VerticalOptions="Center"/> VerticalOptions="Center"/>
<Grid Grid.Column="2" > <Grid Grid.Column="2">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
@ -47,32 +66,34 @@
<Label Grid.Column="2" <Label Grid.Column="2"
Text="{Binding Number}" Text="{Binding Number}"
FontAttributes="Bold" FontAttributes="Bold"
Padding="5"
VerticalOptions="Center" VerticalOptions="Center"
Margin="0,0,20,0"/> Margin="0,0,40,0"
HorizontalOptions="End"/>
<Button Grid.Column="2" <Button Grid.Column="2"
ImageSource="chevron_right.svg" ImageSource="chevron_right.svg"
HeightRequest="35" HeightRequest="35"
WidthRequest="35" WidthRequest="35"
BackgroundColor="#F9F9F9" BackgroundColor="#F9F9F9"
Clicked="OnButtonClicked" Clicked="ButtonTous"
HorizontalOptions="End"/> HorizontalOptions="End"/>
</Grid> </Grid>
<BoxView Grid.ColumnSpan="4" HeightRequest="1" BackgroundColor="LightGray" VerticalOptions="End"> <Rectangle Grid.ColumnSpan="4" HeightRequest="1" BackgroundColor="LightGray" VerticalOptions="End">
<BoxView.Triggers> <Rectangle.Triggers>
<DataTrigger TargetType="BoxView" Binding="{Binding IsLastItem}" Value="true"> <DataTrigger TargetType="Rectangle" Binding="{Binding IsLastItem}" Value="true">
<Setter Property="IsVisible" Value="False"/> <Setter Property="IsVisible" Value="False"/>
</DataTrigger> </DataTrigger>
</BoxView.Triggers> </Rectangle.Triggers>
</BoxView> </Rectangle>
</Grid> </Grid>
</DataTemplate> </DataTemplate>
</CollectionView.ItemTemplate> </CollectionView.ItemTemplate>
</CollectionView> </CollectionView>
<BoxView HeightRequest="1" BackgroundColor="LightGray" VerticalOptions="End"/>
<Label FontSize="18" Padding="10" FontAttributes="Bold" >Filtres</Label> <Rectangle HeightRequest="1" BackgroundColor="black" VerticalOptions="End"/>
<BoxView HeightRequest="1" BackgroundColor="LightGray" VerticalOptions="End"/> <Label FontSize="18" Padding="15" FontAttributes="Bold">Filtres</Label>
<CollectionView ItemsSource="{Binding MyCollections2}" Margin="25,0,0,0"> <Rectangle HeightRequest="1" BackgroundColor="black" VerticalOptions="End"/>
<CollectionView ItemsSource="{Binding MyCollections2}" Margin="25,0,0,0" BackgroundColor="#F9F9F9">
<CollectionView.ItemTemplate> <CollectionView.ItemTemplate>
<DataTemplate> <DataTemplate>
<Grid RowDefinitions="Auto" > <Grid RowDefinitions="Auto" >
@ -96,21 +117,29 @@
<ColumnDefinition Width="*" /> <ColumnDefinition Width="*" />
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<Label Grid.Column="2" <Label Grid.Column="2"
Text="{Binding Name}" Text="{Binding Number}"
FontAttributes="Bold" FontAttributes="Bold"
Padding="5" VerticalOptions="Center"
VerticalOptions="Center"/> Margin="0,0,40,0"
HorizontalOptions="End"/>
<Button Grid.Column="2" <Button Grid.Column="2"
ImageSource="chevron_right.svg" ImageSource="chevron_right.svg"
HeightRequest="35" HeightRequest="35"
WidthRequest="35" WidthRequest="35"
BackgroundColor="White" BackgroundColor="#F9F9F9"
HorizontalOptions="End"/> Clicked="ButtonAuteur"
HorizontalOptions="End"/>
</Grid> </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> </Grid>
</DataTemplate> </DataTemplate>
</CollectionView.ItemTemplate> </CollectionView.ItemTemplate>
</CollectionView> </CollectionView>
<BoxView HeightRequest="1" BackgroundColor="LightGray" VerticalOptions="EndAndExpand" />
</StackLayout> </StackLayout>
</ContentPage> </ContentPage>

@ -1,5 +1,5 @@
using System.Collections.ObjectModel; using BookApp.Pages;
using System.Globalization; using System.Collections.ObjectModel;
namespace BookApp namespace BookApp
{ {
@ -10,17 +10,17 @@ namespace BookApp
public string Name { get; set; } public string Name { get; set; }
public string Icone { get; set; } public string Icone { get; set; }
public int Number { 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; Name = name;
Icone = icone; Icone = icone;
Number = number; Number = number;
IsLastItem = isLastItem;
} }
} }
public bool IsLastItem { get; set; } //TO DO
public ObservableCollection<ObjetTemp> MyCollections1 { get; set; } public ObservableCollection<ObjetTemp> MyCollections1 { get; set; }
public ObservableCollection<ObjetTemp> MyCollections2 { get; set; } public ObservableCollection<ObjetTemp> MyCollections2 { get; set; }
@ -29,26 +29,31 @@ namespace BookApp
InitializeComponent(); InitializeComponent();
MyCollections1 = new ObservableCollection<ObjetTemp>() MyCollections1 = new ObservableCollection<ObjetTemp>()
{ {
new ObjetTemp("Item1", "./Reources/Images/tray_2_fill.svg", 250), new ObjetTemp("Tous", "./Reources/Images/tray_2_fill.svg", 250),
new ObjetTemp("Item1", "./Reources/Images/person_badge_clock_fill.svg", 250), new ObjetTemp("En prêt", "./Reources/Images/person_badge_clock_fill.svg", 250),
new ObjetTemp("Item1", "./Reources/Images/arrow_forward.svg", 250), new ObjetTemp("À lire plus tard", "./Reources/Images/arrow_forward.svg", 250),
new ObjetTemp("Item1", "./Reources/Images/eyeglasses.svg", 250), new ObjetTemp("Statut de lecture", "./Reources/Images/eyeglasses.svg", 250),
new ObjetTemp("Item1", "./Reources/Images/heart_fill.svg", 250), new ObjetTemp("Favoris", "./Reources/Images/heart_fill.svg", 250),
new ObjetTemp("Item1", "./Reources/Images/tag_fill.svg", 250), new ObjetTemp("Étiquettes", "./Reources/Images/tag_fill.svg", 250, true),
}; };
MyCollections2 = new ObservableCollection<ObjetTemp>() MyCollections2 = new ObservableCollection<ObjetTemp>()
{ {
new ObjetTemp("Item1", "./Reources/Images/person_fill.svg", 250), new ObjetTemp("Auteur", "./Reources/Images/person_fill.svg", 250),
new ObjetTemp("Item1", "./Reources/Images/calendar.svg", 250), new ObjetTemp("Date de publication", "./Reources/Images/calendar.svg", 250),
new ObjetTemp("Item1", "./Reources/Images/sparkles.svg", 250), new ObjetTemp("Note", "./Reources/Images/sparkles.svg", 250, true),
}; };
BindingContext = this; BindingContext = this;
} }
// Commande with view model pour le futur async void ButtonTous(object sender, EventArgs args)
async void OnButtonClicked(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;
using System.Collections.Generic; using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -8,9 +9,7 @@ namespace BookApp.Model
{ {
public class Auteur public class Auteur
{ {
public int Id { get; set; }
public string Name { get; set; } public string Name { get; set; }
public ObservableCollection<Book> Books { get; set; }
public Auteur() { }
} }
} }

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

@ -5,44 +5,71 @@
xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit" xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
x:Class="BookApp.Pages.DetailBook"> x:Class="BookApp.Pages.DetailBook">
<Shell.BackButtonBehavior> <Shell.BackButtonBehavior>
<BackButtonBehavior <BackButtonBehavior IsVisible="False" IsEnabled="False"/>
IconOverride="chevron_left.svg"
TextOverride="Tous"/>
</Shell.BackButtonBehavior> </Shell.BackButtonBehavior>
<Shell.TitleView> <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" Text="Détails du livre"
TextColor="White" FontFamily="Strande2"
TextColor="Black"
FontSize="Medium"
VerticalTextAlignment="Center" VerticalTextAlignment="Center"
HeightRequest="50" HorizontalOptions="Center"
FontSize="Medium" Grid.Column="1" />
/> </Grid>
</Shell.TitleView> </Shell.TitleView>
<ContentPage.Content> <ContentPage.Content>
<ScrollView> <ScrollView>
<StackLayout> <StackLayout>
<BoxView HeightRequest="1" BackgroundColor="LightGray" VerticalOptions="End" /> <Rectangle HeightRequest="1" BackgroundColor="LightGray" VerticalOptions="End"/>
<Grid RowDefinitions="auto"> <Grid RowDefinitions="auto">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="125"/> <ColumnDefinition Width="125"/>
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions> </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"> <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 RowDefinitions="auto" VerticalOptions="EndAndExpand">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions> </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 --> <!-- Les étoiles seront ajoutées ici via le code-behind -->
</StackLayout> </StackLayout>
<Label x:Name="RatingLabel" Grid.Column="1" FontSize="Medium" HorizontalOptions="CenterAndExpand"/> <Label x:Name="RatingLabel" Grid.Column="1" FontSize="Medium" HorizontalOptions="CenterAndExpand"/>
</Grid> </Grid>
</StackLayout> </StackLayout>
</Grid> </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> <Grid>
<Label FontAttributes="Bold" Margin="25,0,0,0" VerticalTextAlignment="Center" Text="Info en ligne"/> <Label FontAttributes="Bold" Margin="25,0,0,0" VerticalTextAlignment="Center" Text="Info en ligne"/>
<Button Grid.Column="1" <Button Grid.Column="1"
@ -52,16 +79,16 @@
BackgroundColor="White" BackgroundColor="White"
HorizontalOptions="End"/> HorizontalOptions="End"/>
</Grid> </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 FontAttributes="Bold" Margin="25,0,0,0" VerticalTextAlignment="Center" Text="Auteur"/>
<Label Margin="25,0,0,0" VerticalTextAlignment="Center" Text="Alain Damasio"/> <Label Margin="25,0,0,0" VerticalTextAlignment="Center" Text="{Binding BookDetail.Auteur.Name}"/>
<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="Maison d'édition"/> <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)"/> <Label Margin="25,0,0,0" VerticalTextAlignment="Center" Text="{Binding BookDetail.MaisonEdit}"/>
<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="Résumer"/> <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."/> <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"/> <Label FontAttributes="Bold" Margin="25,0,0,0" VerticalTextAlignment="Center" Text="Details"/>
<Grid Margin="25,0,20,0"> <Grid Margin="25,0,20,0">
<Grid.RowDefinitions> <Grid.RowDefinitions>
@ -74,13 +101,13 @@
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<Label Grid.Row="0" Grid.Column="0" Text="Nombre de pages"/> <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="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="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> </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"/> <Label FontAttributes="Bold" Margin="25,0,0,0" VerticalTextAlignment="Center" Text="Status de lecture"/>
<Grid RowDefinitions="auto" Margin="25,0,20,0"> <Grid RowDefinitions="auto" Margin="25,0,20,0">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
@ -88,9 +115,9 @@
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<Label Grid.Column="0" Text="Status"/> <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> </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"/> <Label FontAttributes="Bold" Margin="25,0,0,0" VerticalTextAlignment="Center" Text="biliothèque"/>
<Grid RowDefinitions="auto" Margin="25,0,20,0"> <Grid RowDefinitions="auto" Margin="25,0,20,0">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
@ -98,9 +125,11 @@
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<Label Grid.Column="0" Text="Ajouter le"/> <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> </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 RowDefinitions="auto" Margin="25,0,20,0">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="25"/> <ColumnDefinition Width="25"/>
@ -114,7 +143,7 @@
</Image> </Image>
<Label Margin="10,0,0,0" VerticalOptions="Center" Grid.Column="1" TextColor="Red" Text="Déplacer le livre"/> <Label Margin="10,0,0,0" VerticalOptions="Center" Grid.Column="1" TextColor="Red" Text="Déplacer le livre"/>
</Grid> </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 RowDefinitions="auto" Margin="25,0,20,0">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="25"/> <ColumnDefinition Width="25"/>
@ -128,7 +157,7 @@
</Image> </Image>
<Label Margin="10,0,0,0" VerticalOptions="Center" Grid.Column="1" TextColor="Red" Text="Ajouter à la liste à lire plus tard"/> <Label Margin="10,0,0,0" VerticalOptions="Center" Grid.Column="1" TextColor="Red" Text="Ajouter à la liste à lire plus tard"/>
</Grid> </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 RowDefinitions="auto" Margin="25,0,20,0">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="25"/> <ColumnDefinition Width="25"/>
@ -142,7 +171,7 @@
</Image> </Image>
<Label Margin="10,0,0,0" VerticalOptions="Center" Grid.Column="1" TextColor="Red" Text="Changer le statut de lecture"/> <Label Margin="10,0,0,0" VerticalOptions="Center" Grid.Column="1" TextColor="Red" Text="Changer le statut de lecture"/>
</Grid> </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 RowDefinitions="auto" Margin="25,0,20,20">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="25"/> <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"/> <Label Margin="10,0,0,0" VerticalOptions="Center" Grid.Column="1" TextColor="Red" Text="Prêter le livre"/>
</Grid> </Grid>
<BoxView HeightRequest="1" BackgroundColor="LightGray" VerticalOptions="EndAndExpand" /> <BoxView HeightRequest="1" BackgroundColor="LightGray" VerticalOptions="EndAndExpand" />
<!-- Gestion Star TODO -->
</StackLayout> </StackLayout>
</ScrollView> </ScrollView>
</ContentPage.Content> </ContentPage.Content>

@ -1,3 +1,4 @@
using BookApp.Model;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
namespace BookApp.Pages; namespace BookApp.Pages;
@ -7,7 +8,9 @@ public partial class DetailBook : ContentPage
private int maxStars = 5; private int maxStars = 5;
private int currentRating = 0; private int currentRating = 0;
public DetailBook() public Book BookDetail { get; set; }
public DetailBook(Book ItemBook)
{ {
InitializeComponent(); InitializeComponent();
@ -16,8 +19,8 @@ public partial class DetailBook : ContentPage
var star = new Image var star = new Image
{ {
Source = "empty_star.svg", // image d'une étoile vide Source = "empty_star.svg", // image d'une étoile vide
WidthRequest = 30, WidthRequest = 25,
HeightRequest = 30 HeightRequest = 25
}; };
int currentStar = i; int currentStar = i;
@ -29,7 +32,7 @@ public partial class DetailBook : ContentPage
} }
UpdateStars(); UpdateStars();
BookDetail = ItemBook;
BindingContext = this; BindingContext = this;
} }
@ -57,4 +60,9 @@ public partial class DetailBook : ContentPage
star.Source = "empty_star.svg"; 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="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit" xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
x:Class="BookApp.Pages.Filtrage" xmlns:composants="clr-namespace:BookApp.Composants"
Title="Filtrage"> x:Class="BookApp.Pages.Filtrage">
<Shell.BackButtonBehavior> <Shell.BackButtonBehavior>
<BackButtonBehavior <BackButtonBehavior IsVisible="False" IsEnabled="False"/>
IconOverride="chevron_left.svg"
TextOverride="Tous"/>
</Shell.BackButtonBehavior> </Shell.BackButtonBehavior>
<Shell.TitleView> <Shell.TitleView>
<Label <Grid RowDefinitions="Auto" VerticalOptions="Center">
Text="{Binding TitleSection}" <Grid.ColumnDefinitions>
FontFamily="Strande2" <ColumnDefinition Width="Auto" />
TextColor="White" <ColumnDefinition Width="*" />
VerticalTextAlignment="Center" <ColumnDefinition Width="Auto" />
VerticalOptions="CenterAndExpand" </Grid.ColumnDefinitions>
HeightRequest="50" <HorizontalStackLayout Grid.Column="0">
FontSize="Medium" <Image
HorizontalTextAlignment="Center"/> Source="Chevron_left.svg"
<!-- Date de publication ou auteur --> 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> </Shell.TitleView>
<ContentPage.ToolbarItems>
<ToolbarItem IconImageSource="arrow_up_arrow_down.svg" Priority="1" Order="Primary" />
</ContentPage.ToolbarItems>
<ContentPage.Content> <ContentPage.Content>
<StackLayout> <StackLayout>
<BoxView HeightRequest="1" BackgroundColor="LightGray"/> <Rectangle HeightRequest="1" BackgroundColor="LightGray"/>
<SearchBar Placeholder="Search items..." /> <SearchBar Placeholder="Search items..."/>
<BoxView HeightRequest="1" BackgroundColor="LightGray"/> <Rectangle HeightRequest="1" BackgroundColor="LightGray"/>
<CollectionView ItemsSource="{Binding BookCollection}"> <composants:CollectionFiltrage VerticalOptions="FillAndExpand"/>
<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>
</StackLayout> </StackLayout>
</ContentPage.Content> </ContentPage.Content>
</ContentPage> </ContentPage>

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

@ -2,73 +2,74 @@
<ContentPage <ContentPage
xmlns="http://schemas.microsoft.com/dotnet/2021/maui" xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:usecase="clr-namespace:BookApp.UseCase"
xmlns:composants="clr-namespace:BookApp.Composants" 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> <Shell.TitleView>
<Label <Grid RowDefinitions="Auto" VerticalOptions="Center">
Text="Tous" <Grid.ColumnDefinitions>
FontFamily="Strande2" <ColumnDefinition Width="Auto" />
TextColor="White" <ColumnDefinition Width="*" />
VerticalTextAlignment="Center" <ColumnDefinition Width="Auto" />
VerticalOptions="CenterAndExpand" </Grid.ColumnDefinitions>
HeightRequest="50" <HorizontalStackLayout Grid.Column="0">
FontSize="Medium" <Image
HorizontalTextAlignment="Center"/> 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> </Shell.TitleView>
<ContentPage.Content> <ContentPage.Content>
<CollectionView ItemsSource="{Binding BookCollection}"> <composants:GroupCollection/>
<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}"
TextColor="Black"/>
<Label Text="{Binding Auteur.Name}"
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>
</ContentPage.Content> </ContentPage.Content>
</ContentPage> </ContentPage>

@ -1,7 +1,6 @@
using BookApp.Model; using BookApp.ViewModel;
using BookApp.ViewModel;
namespace BookApp namespace BookApp.Pages
{ {
public partial class Tous : ContentPage public partial class Tous : ContentPage
{ {
@ -10,5 +9,10 @@ namespace BookApp
InitializeComponent(); InitializeComponent();
BindingContext = new TousViewModel(); 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="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"> xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml">
<Color x:Key="BackGroundApp">#F9F9F9</Color>
<Color x:Key="Primary">red</Color> <Color x:Key="Primary">red</Color>
<Color x:Key="Secondary">#DFD8F7</Color> <Color x:Key="Secondary">#DFD8F7</Color>
<Color x:Key="Tertiary">#2B0B98</Color> <Color x:Key="Tertiary">#2B0B98</Color>

@ -377,7 +377,7 @@
</Style> </Style>
<Style TargetType="Shell" ApplyToDerivedTypes="True"> <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.ForegroundColor" Value="{OnPlatform WinUI={StaticResource Primary}, Default={StaticResource White}}" />
<Setter Property="Shell.TitleColor" Value="{AppThemeBinding Light={StaticResource White}, Dark={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}}" /> <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 class TousViewModel
{ {
public ObservableCollection<Book> BookCollection { get; set; } = public class AuteurGroup : ObservableCollection<Book>
new 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() public TousViewModel()
{ {
Stub stub = new Stub(); ObservableCollection<Auteur> auteurs = new Stub().CreateStubData();
BookCollection = stub.GetStubData(); foreach (Auteur auteur in auteurs)
{
AuteurGroups.Add(new AuteurGroup(auteur.Name, auteur.Books));
}
} }
} }
} }

Loading…
Cancel
Save