add 'RemoveFromMyList' button to remove a recipe from MyList
continuous-integration/drone/push Build is passing Details

master
Maxime BATISTA 2 years ago
parent 8e5e75d49d
commit 060618d89f

@ -75,9 +75,29 @@ namespace LocalEndpoint
db.InsertInUserList(Account.User.Id, info.Id, persAmount); db.InsertInUserList(Account.User.Id, info.Id, persAmount);
return true;
}
public bool RemoveFromWeeklyList(RecipeInfo info)
{
var weeklyDict = db.GetRecipeListOf(Account.User.Id);
if (!weeklyDict.ContainsKey(info.Id))
return false;
db.RemoveFromUserList(Account.User.Id, info.Id);
return true; return true;
} }
public bool IsInWeeklyList(RecipeInfo info)
{
foreach (var (inf, _) in GetWeeklyList())
{
if (inf == info) return true;
}
return false;
}
public void AddToFavorites(RecipeInfo info) public void AddToFavorites(RecipeInfo info)
{ {

@ -11,7 +11,11 @@ namespace Endpoint
public void AddToFavorites(RecipeInfo info); public void AddToFavorites(RecipeInfo info);
public void RemoveFromFavorites(RecipeInfo info); public void RemoveFromFavorites(RecipeInfo info);
public void SetReviewScore(RecipeInfo info, uint score); public void SetReviewScore(RecipeInfo info, uint score);
public bool AddToWeeklyList(RecipeInfo info, uint persAmount); public bool AddToWeeklyList(RecipeInfo info, uint persAmount);
public bool RemoveFromWeeklyList(RecipeInfo info);
public bool IsInWeeklyList(RecipeInfo info);
public RecipeRate GetRate(RecipeInfo info); public RecipeRate GetRate(RecipeInfo info);

@ -1,44 +1,44 @@
using Models; using Models;
namespace ShoopNCook.Views namespace ShoopNCook.Views
{ {
public partial class RecipeView : ContentView public partial class RecipeView : ContentView
{ {
private readonly Action callback; private readonly Action callback;
public RecipeView(RecipeInfo info, Action callback) public RecipeView(RecipeInfo info, Action callback)
{ {
this.callback = callback; this.callback = callback;
BindingContext = info; BindingContext = info;
InitializeComponent(); InitializeComponent();
Note = info.AverageNote; Note = info.AverageNote;
} }
public float Note public float Note
{ {
set => SetNote(value); set => SetNote(value);
} }
private void SetNote(float note) private void SetNote(float note)
{ {
note = (uint)note; //truncate integer as we currently do not handle semi stars note = (uint)note; //truncate integer as we currently do not handle semi stars
foreach (Image img in Stars.Children.Reverse()) foreach (Image img in Stars.Children.Reverse())
{ {
if (note > 0) if (note > 0)
{ {
img.Opacity = 1; img.Opacity = 1;
note--; note--;
} }
else img.Opacity = 0; else img.Opacity = 0;
} }
} }
private void OnRecipeTapped(object sender, EventArgs e) private void OnRecipeTapped(object sender, EventArgs e)
{ {
callback(); callback();
} }
} }
} }

@ -32,6 +32,7 @@ public partial class FavoritesPage : ContentPage
RecipeViewLayout.Children.Add(new RecipeView(info, () => RecipeViewLayout.Children.Add(new RecipeView(info, () =>
{ {
Recipe recipe = service.GetRecipe(info); Recipe recipe = service.GetRecipe(info);
Shell.Current.Navigation.PushAsync(new RecipePage(recipe, notifier, preferences, 1)); Shell.Current.Navigation.PushAsync(new RecipePage(recipe, notifier, preferences, 1));
})); }));
}); });

@ -49,7 +49,7 @@
<Image <Image
Aspect="AspectFill" Aspect="AspectFill"
HeightRequest="250" HeightRequest="250"
x:Name="RecipeImage"/> Source="{Binding Recipe.Info.Image}"/>
</Border> </Border>
<!--Steps--> <!--Steps-->
@ -138,25 +138,25 @@
<!--Footer--> <!--Footer-->
<FlexLayout <Grid
Grid.Row="1" Grid.Row="1"
Direction="Row" ColumnDefinitions="Auto, *, Auto"
JustifyContent="SpaceBetween" HeightRequest="50"
AlignItems="Center"
> >
<views:CounterView <views:CounterView
Grid.Column="0"
x:Name="Counter" x:Name="Counter"
CounterText="pers" CounterText="pers"
HeightRequest="41"
Count="1"/> Count="1"/>
<Button <Button
Grid.Column="1" Grid.Column="2"
Text="Add to list"
Style="{StaticResource UserButton}" Style="{StaticResource UserButton}"
TextColor="White"
BackgroundColor="Gray" BackgroundColor="Gray"
Clicked="OnAddToMyListClicked"> x:Name="MyListStateButton"
</Button> Clicked="OnFooterButtonClicked"/>
</FlexLayout>
</Grid>
</Grid> </Grid>
</ContentPage> </ContentPage>

@ -11,19 +11,21 @@ public partial class RecipePage : ContentPage
private readonly IAccountRecipesPreferences preferences; private readonly IAccountRecipesPreferences preferences;
private readonly IUserNotifier notifier; private readonly IUserNotifier notifier;
public Recipe Recipe { get; init; }
private uint note; private uint note;
private bool isFavorite; private bool isFavorite;
private bool isInMyList;
public Recipe Recipe { get; init; }
public ICommand StarCommand => new Command<string>(count => SetNote(uint.Parse(count))); public ICommand StarCommand => new Command<string>(count => SetNote(uint.Parse(count)));
public RecipePage(Recipe recipe, IUserNotifier notifier, IAccountRecipesPreferences preferences, uint amount) public RecipePage(Recipe recipe, IUserNotifier notifier, IAccountRecipesPreferences preferences, uint amount)
{ {
Recipe = recipe; Recipe = recipe;
BindingContext = this; BindingContext = this;
InitializeComponent(); InitializeComponent();
this.preferences = preferences; this.preferences = preferences;
@ -36,12 +38,10 @@ public partial class RecipePage : ContentPage
SetFavorite(isFavorite); SetFavorite(isFavorite);
SetNote(note); SetNote(note);
SetIsInMyListState(preferences.IsInWeeklyList(recipe.Info));
Counter.Count = amount; Counter.Count = amount;
if (recipe.Info.Image != null)
RecipeImage.Source = ImageSource.FromUri(recipe.Info.Image);
foreach (Ingredient ingredient in recipe.Ingredients) foreach (Ingredient ingredient in recipe.Ingredients)
IngredientList.Add(new IngredientView(ingredient)); IngredientList.Add(new IngredientView(ingredient));
@ -58,6 +58,19 @@ public partial class RecipePage : ContentPage
} }
} }
private void SetIsInMyListState(bool isInMyList)
{
this.isInMyList = isInMyList;
if (isInMyList)
{
MyListStateButton.Text = "Remove From My List";
}
else
{
MyListStateButton.Text = "Add To My List";
}
}
private void SetNote(uint note) private void SetNote(uint note)
{ {
this.note = note; this.note = note;
@ -89,12 +102,37 @@ public partial class RecipePage : ContentPage
notifier.Success("Your review has been successfuly submited"); notifier.Success("Your review has been successfuly submited");
} }
private void OnAddToMyListClicked(object o, EventArgs e) private void OnFooterButtonClicked(object o, EventArgs e)
{
SetIsInMyListState(!isInMyList);
if (isInMyList)
RemoveFromMyList();
else
AddToMyList();
}
private void RemoveFromMyList()
{
if (!preferences.RemoveFromWeeklyList(Recipe.Info))
{
notifier.Notice("This recipe does not figures in your personnal list");
}
else
{
notifier.Success("Recipe added to your weekly list.");
}
}
private void AddToMyList()
{ {
if (!preferences.AddToWeeklyList(Recipe.Info, Counter.Count)) if (!preferences.AddToWeeklyList(Recipe.Info, Counter.Count))
{
notifier.Notice("You already added this recipe to you weekly list!"); notifier.Notice("You already added this recipe to you weekly list!");
}
else else
{
notifier.Success("Recipe added to your weekly list."); notifier.Success("Recipe added to your weekly list.");
}
} }
private void SetFavorite(bool isFavorite) private void SetFavorite(bool isFavorite)

Loading…
Cancel
Save