Я пытаюсь решить это, но на всю жизнь не могу!
Я звоню по API, который разбит на страницы, каждая страница содержит 20 элементов.Я пытаюсь реализовать бесконечную прокрутку в моем пользовательском интерфейсе, чтобы использовать данные этого API, и мы загружаем 12 элементов за раз, поэтому мне нужно выяснить, какой номер страницы нужно взять и сколько взять в этом API.
Например:
Я в настоящее время нахожусь в пункте 10, и я хочу взять еще 20 предметов, это означает, что мне нужно взять 10 предметов со страницы 1 и затем 10 предметов со страницы 2. Но яне могу понять, как это сделать!
Это модель, с которой я работаю:
public class PagesToLoad
{
public int Page { get; set; }
public int Take { get; set; }
public int Skip { get; set; }
}
Вот подпись метода
public static List<PagesToLoad> GetPage(int currentlyLoaded, int toLoad, int maxItemsPerPage)
Я бы показалто, что я пробовал, но это бессмысленно, так как я не могу понять, как это сделать.
Несколько примеров:
nowLoaded = 0, и я хочу загрузить 12 и maxItemsPerPage
равно 20. Таким образом, результаты должны быть:
new List<PagesToLoad>
{
new PagesToLoad
{
Page = 1,
Skip = 0,
Take = 12
},
}
currentLoaded = 10, и я хочу загрузить 20, а maxItemsPerPage
равно 20. Итак, результаты должны быть:
new List<PagesToLoad>
{
new PagesToLoad
{
Page = 1,
Skip = 10,
Take = 10
},
new PagesToLoad
{
Page = 2,
Take = 10,
Skip = 0
}
}
Обновление:
Я написал несколько модульных тестов, чтобы попытаться протестировать некоторые из этих сценариев с помощью NUnit.Приведенные ниже тесты в настоящее время только проверяют, что он возвращает правильную страницу, с которой мы должны брать, и в настоящее время не проверяют правильную позицию на текущей странице
[TestCaseSource(nameof(TestData))]
public void TestPaginationPagesToLoad(int currentlyLoaded, int toLoad, int maxItemsPerPage, int[] expectedPages)
{
var result = PaginationHelper.GetNextPages(currentlyLoaded, toLoad, maxItemsPerPage);
var pages = result.Select(x => x.Page).ToArray();
Assert.That(pages.Length, Is.EqualTo(expectedPages.Length), "Did not contain the correct amount of pages");
for (int i = 0; i < pages.Length; i++)
{
Assert.That(pages[i], Is.EqualTo(expectedPages[i]));
}
}
public static IEnumerable<TestCaseData> TestData
{
get
{
yield return new TestCaseData(0, 10, 20, new [] { 1 }).SetName("Load_First_Page");
yield return new TestCaseData(20, 10, 20, new [] { 2 }).SetName("Load_Second_Page");
yield return new TestCaseData(0, 20, 20, new [] { 1 }).SetName("Load_Full_First_Page");
yield return new TestCaseData(20, 20, 20, new [] { 2 }).SetName("Load_Full_Second_Page");
yield return new TestCaseData(10, 20, 20, new [] { 1, 2 }).SetName("Load_Half_First_Page_And_Half_Second_Page");
yield return new TestCaseData(19, 20, 20, new [] { 1, 2 }).SetName("Load_End_First_Page_And_Most_Second_Page");
}
}