getPages method

List<num> getPages(
  1. num page,
  2. num pagesCount,
  3. num paginationSize
)

Implementation

List<num> getPages(num page, num pagesCount, num paginationSize) {
  List<num> result = [];

  if (pagesCount == 1) {
    result.add(1);
    return result;
  }

  if (pagesCount < page) {
    return result;
  }

  if (pagesCount < paginationSize + 1) {
    for (var i = 2; i < pagesCount + 1; i++) {
      result.add(i);
    }
    return result;
  }

  if (page == 1) {
    for (var i = 2; i < paginationSize + 1; i++) {
      if (i < pagesCount) {
        result.add(i);
      }
    }
    return result;
  }

  if (page == pagesCount) {
    for (var i = pagesCount - paginationSize + 1; i <= pagesCount; i++) {
      if (i <= pagesCount) {
        result.add(i);
      }
    }
    return result;
  }

  var shiftCount = (paginationSize / 2).floor();
  if (shiftCount < 1) {
    result.add(page);
    return result;
  }

  if (page < shiftCount + 2) {
    for (var i = 2; i < paginationSize + 1; i++) {
      result.add(i);
    }
    return result;
  }

  if (pagesCount - page < shiftCount + 2) {
    for (var i = pagesCount - paginationSize + 1; i < pagesCount + 1; i++) {
      result.add(i);
    }
    return result;
  }

  for (var i = page - shiftCount; i < page; i++) {
    if (i > 0) {
      result.add(i);
    }
  }
  result.add(page);
  for (var i = page + 1; i < page + shiftCount + 1; i++) {
    if (i <= pagesCount) {
      result.add(i);
    }
  }

  return result;
}