public static Task <ReviewsPage> NextPage(this ReviewsPage page, int fetchSize = 5) { if (page.NextKey == null) { throw new RegenException("There are no more reviews to fetch"); } return(ReGenClient.Instance.Reviews.GetPage(page.RecipeId, page.NextKey, fetchSize)); }
private void OnReviewsPage(object sender, EventArgs e) { var user = (EmployeeViewModel)BindingContext; var reviewsPage = new ReviewsPage() { BindingContext = user.ReceivedReviews }; Navigation.PushAsync(reviewsPage); }
public async Task <ReviewsPage> GetReviewsPageAsync(string recipeId, string pageStartKey, int pageSize) { try { // To-do: config options for index names and page sizes IReadOnlyCollection <FirebaseObject <Review> > results; if (!String.IsNullOrWhiteSpace(pageStartKey)) { results = await _client.Child("reviews") .Child(recipeId) .OrderByKey() .EndAt(pageStartKey) .LimitToLast(pageSize + 1) .OnceAsync <Review>(); } else { results = await _client.Child("reviews") .Child(recipeId) .OrderByKey() .LimitToLast(pageSize + 1) .OnceAsync <Review>(); } if (results.Count < 1) { throw new NoResultsFoundException("No reviews found for recipe ID: " + recipeId); } //var ratings = results.Select(async o => // new KeyValuePair<string, int> // (o.Object.UserId, // await GetUserRatingAsync(o.Object.UserId, recipeId)) //); // If the number of results is less than the requested page size, don't generate a "start key" var page = results.Count < pageSize ? results : results.Skip(1); var ratings = new Dictionary <string, int>(); foreach (var r in page) { var rating = await GetUserRatingAsync(r.Object.UserId, recipeId); ratings.Add(r.Object.UserId, rating); } var reviews = from pair in page select new Review { RecipeId = recipeId, ReviewId = pair.Key, UserId = pair.Object.UserId, Content = pair.Object.Content, Timestamp = pair.Object.Timestamp, Rating = ratings[pair.Object.UserId] }; var trimmedPage = reviews.Reverse(); //trimmedPage.RemoveAt(trimmedPage.Count - 1); var reviewPage = new ReviewsPage { NextKey = results.Count < pageSize ? null : results.First().Key, Reviews = trimmedPage }; return(reviewPage); } catch (Exception) { throw; } }