You are here

protected static function OffsetLimitPaginator::getPagerQueries in JSON:API Resources 8

Get the query param array.

Parameters

string $link_id: The name of the pagination link requested.

int $offset: The starting index.

int $size: The pagination page size.

array $query: The query parameters.

int $total: The total size of the collection.

Return value

array The pagination query param array.

1 call to OffsetLimitPaginator::getPagerQueries()
OffsetLimitPaginator::getPaginationLinks in src/Unstable/Entity/Query/Pagination/OffsetLimitPaginator.php
Get pagination links. Must not be called before executing the query.

File

src/Unstable/Entity/Query/Pagination/OffsetLimitPaginator.php, line 155

Class

OffsetLimitPaginator
A paginator for handling offset-limit pagination in JSON:API request.

Namespace

Drupal\jsonapi_resources\Unstable\Entity\Query\Pagination

Code

protected static function getPagerQueries($link_id, $offset, $size, array $query = [], $total = 0) {
  $extra_query = [];
  switch ($link_id) {
    case 'next':
      $extra_query = [
        'page' => [
          'offset' => $offset + $size,
          'limit' => $size,
        ],
      ];
      break;
    case 'first':
      $extra_query = [
        'page' => [
          'offset' => 0,
          'limit' => $size,
        ],
      ];
      break;
    case 'last':
      if ($total) {
        $extra_query = [
          'page' => [
            'offset' => (ceil($total / $size) - 1) * $size,
            'limit' => $size,
          ],
        ];
      }
      break;
    case 'prev':
      $extra_query = [
        'page' => [
          'offset' => max($offset - $size, 0),
          'limit' => $size,
        ],
      ];
      break;
  }
  return array_merge($query, $extra_query);
}