Skip to content

Commit

Permalink
Paginator: add firstItemOnPage & lastItemOnPage [Closes #262] (#263)
Browse files Browse the repository at this point in the history
  • Loading branch information
khorsky committed Aug 13, 2021
1 parent 6fd5ce6 commit 7732388
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 0 deletions.
22 changes: 22 additions & 0 deletions src/Utils/Paginator.php
Expand Up @@ -18,6 +18,8 @@
* @property int $page
* @property-read int $firstPage
* @property-read int|null $lastPage
* @property-read int $firstItemOnPage
* @property-read int $lastItemOnPage
* @property int $base
* @property-read bool $first
* @property-read bool $last
Expand Down Expand Up @@ -80,6 +82,26 @@ public function getLastPage(): ?int
}


/**
* Returns the sequence number of the first element on the page
*/
public function getFirstItemOnPage(): int
{
return $this->itemCount !== 0
? $this->offset + 1
: 0;
}


/**
* Returns the sequence number of the last element on the page
*/
public function getLastItemOnPage(): int
{
return $this->offset + $this->length;
}


/**
* Sets first page (base) number.
*/
Expand Down
20 changes: 20 additions & 0 deletions tests/Utils/Paginator.phpt
Expand Up @@ -24,6 +24,8 @@ test('', function () {
Assert::same(2, $paginator->pageCount);
Assert::same(0, $paginator->firstPage);
Assert::same(1, $paginator->lastPage);
Assert::same(7, $paginator->firstItemOnPage);
Assert::same(7, $paginator->lastItemOnPage);
Assert::same(6, $paginator->offset);
Assert::same(0, $paginator->countdownOffset);
Assert::same(1, $paginator->length);
Expand All @@ -38,6 +40,8 @@ test('', function () {
$paginator->page = -1;

Assert::same(0, $paginator->page);
Assert::same(1, $paginator->firstItemOnPage);
Assert::same(6, $paginator->lastItemOnPage);
Assert::same(0, $paginator->offset);
Assert::same(1, $paginator->countdownOffset);
Assert::same(6, $paginator->length);
Expand All @@ -55,6 +59,8 @@ test('', function () {
Assert::same(1, $paginator->pageCount);
Assert::same(0, $paginator->firstPage);
Assert::same(0, $paginator->lastPage);
Assert::same(1, $paginator->firstItemOnPage);
Assert::same(7, $paginator->lastItemOnPage);
Assert::same(0, $paginator->offset);
Assert::same(0, $paginator->countdownOffset);
Assert::same(7, $paginator->length);
Expand All @@ -72,6 +78,8 @@ test('', function () {
Assert::same(0, $paginator->pageCount);
Assert::same(0, $paginator->firstPage);
Assert::same(0, $paginator->lastPage);
Assert::same(0, $paginator->firstItemOnPage);
Assert::same(0, $paginator->lastItemOnPage);
Assert::same(0, $paginator->offset);
Assert::same(0, $paginator->countdownOffset);
Assert::same(0, $paginator->length);
Expand All @@ -89,6 +97,8 @@ test('', function () {
Assert::same(2, $paginator->pageCount);
Assert::same(1, $paginator->firstPage);
Assert::same(2, $paginator->lastPage);
Assert::same(7, $paginator->firstItemOnPage);
Assert::same(7, $paginator->lastItemOnPage);
Assert::same(6, $paginator->offset);
Assert::same(0, $paginator->countdownOffset);
Assert::same(1, $paginator->length);
Expand All @@ -102,23 +112,31 @@ test('', function () {
$paginator->setItemCount(0);
Assert::true($paginator->isFirst());
Assert::true($paginator->isLast());
Assert::same(0, $paginator->firstItemOnPage);
Assert::same(0, $paginator->lastItemOnPage);


// ItemCount: 1
$paginator->setItemCount(1);
Assert::true($paginator->isFirst());
Assert::true($paginator->isLast());
Assert::same(1, $paginator->firstItemOnPage);
Assert::same(1, $paginator->lastItemOnPage);


// ItemCount: 2
$paginator->setItemCount(2);
Assert::true($paginator->isFirst());
Assert::false($paginator->isLast());
Assert::same(1, $paginator->firstItemOnPage);
Assert::same(1, $paginator->lastItemOnPage);

// Page 2
$paginator->setPage(2);
Assert::false($paginator->isFirst());
Assert::true($paginator->isLast());
Assert::same(2, $paginator->firstItemOnPage);
Assert::same(2, $paginator->lastItemOnPage);
});


Expand All @@ -132,6 +150,8 @@ test('', function () {
Assert::null($paginator->pageCount);
Assert::same(0, $paginator->firstPage);
Assert::null($paginator->lastPage);
Assert::same(19, $paginator->firstItemOnPage);
Assert::same(24, $paginator->lastItemOnPage);
Assert::same(18, $paginator->offset);
Assert::null($paginator->countdownOffset);
Assert::same(6, $paginator->length);
Expand Down

0 comments on commit 7732388

Please sign in to comment.