using ShoopNCook.Views; using System.Windows.Input; using Models; using LocalEndpoint; using Endpoint; namespace ShoopNCook.Pages; public partial class RecipePage : ContentPage { private readonly IAccountRecipesPreferences preferences; private readonly IUserNotifier notifier; private uint note; private bool isFavorite; private bool isInMyList; public Recipe Recipe { get; init; } public ICommand StarCommand => new Command(count => SetNote(uint.Parse(count))); public RecipePage(Recipe recipe, IUserNotifier notifier, IAccountRecipesPreferences preferences, uint amount) { Recipe = recipe; BindingContext = this; InitializeComponent(); this.preferences = preferences; this.notifier = notifier; RecipeRate rate = preferences.GetRate(recipe.Info); note = rate.Rate; isFavorite = rate.IsFavorite; SetFavorite(isFavorite); SetNote(note); SetIsInMyListState(preferences.IsInWeeklyList(recipe.Info)); Counter.Count = amount; foreach (Ingredient ingredient in recipe.Ingredients) IngredientList.Add(new IngredientView(ingredient)); //retrieves the app's styles var styles = Application.Current.Resources.MergedDictionaries.ElementAt(1); int count = 0; foreach (PreparationStep step in recipe.Steps) { //TODO display name of PreparationSteps. Label label = new Label(); label.Style = (Style)styles["Small"]; label.Text = "Step " + ++count + ": " + step.Description; StepList.Add(label); } } 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) { this.note = note; int i = 1; foreach (ImageButton img in Stars.Children) { if (i <= note) { img.Source = ImageSource.FromFile("star_full.svg"); i++; } else img.Source = ImageSource.FromFile("star_empty.svg"); } } private void OnFavorite(object o, EventArgs e) { SetFavorite(!isFavorite); if (isFavorite) preferences.AddToFavorites(Recipe.Info); else preferences.RemoveFromFavorites(Recipe.Info); } private void OnSubmitReviewClicked(object o, EventArgs e) { preferences.SetReviewScore(Recipe.Info, note); notifier.Success("Your review has been successfuly submited"); } 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)) { notifier.Notice("You already added this recipe to you weekly list!"); } else { notifier.Success("Recipe added to your weekly list."); } } private void SetFavorite(bool isFavorite) { this.isFavorite = isFavorite; if (isFavorite) Favorite.Source = ImageSource.FromFile("hearth_on.svg"); else Favorite.Source = ImageSource.FromFile("hearth_off.svg"); } private void OnBackButtonClicked(object sender, EventArgs e) { Navigation.PopAsync(); } }