Skip to content

Commit e0a89b6

Browse files
khorskydg
authored andcommitted
Paginator: add firstItemOnPage & lastItemOnPage [Closes #262] (#263)
1 parent 8c8af0d commit e0a89b6

File tree

2 files changed

+42
-0
lines changed

2 files changed

+42
-0
lines changed

src/Utils/Paginator.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
* @property int $page
1919
* @property-read int $firstPage
2020
* @property-read int|null $lastPage
21+
* @property-read int $firstItemOnPage
22+
* @property-read int $lastItemOnPage
2123
* @property int $base
2224
* @property-read bool $first
2325
* @property-read bool $last
@@ -85,6 +87,26 @@ public function getLastPage(): ?int
8587
}
8688

8789

90+
/**
91+
* Returns the sequence number of the first element on the page
92+
*/
93+
public function getFirstItemOnPage(): int
94+
{
95+
return $this->itemCount !== 0
96+
? $this->offset + 1
97+
: 0;
98+
}
99+
100+
101+
/**
102+
* Returns the sequence number of the last element on the page
103+
*/
104+
public function getLastItemOnPage(): int
105+
{
106+
return $this->offset + $this->length;
107+
}
108+
109+
88110
/**
89111
* Sets first page (base) number.
90112
* @return static

tests/Utils/Paginator.phpt

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ test('', function () {
2424
Assert::same(2, $paginator->pageCount);
2525
Assert::same(0, $paginator->firstPage);
2626
Assert::same(1, $paginator->lastPage);
27+
Assert::same(7, $paginator->firstItemOnPage);
28+
Assert::same(7, $paginator->lastItemOnPage);
2729
Assert::same(6, $paginator->offset);
2830
Assert::same(0, $paginator->countdownOffset);
2931
Assert::same(1, $paginator->length);
@@ -38,6 +40,8 @@ test('', function () {
3840
$paginator->page = -1;
3941

4042
Assert::same(0, $paginator->page);
43+
Assert::same(1, $paginator->firstItemOnPage);
44+
Assert::same(6, $paginator->lastItemOnPage);
4145
Assert::same(0, $paginator->offset);
4246
Assert::same(1, $paginator->countdownOffset);
4347
Assert::same(6, $paginator->length);
@@ -55,6 +59,8 @@ test('', function () {
5559
Assert::same(1, $paginator->pageCount);
5660
Assert::same(0, $paginator->firstPage);
5761
Assert::same(0, $paginator->lastPage);
62+
Assert::same(1, $paginator->firstItemOnPage);
63+
Assert::same(7, $paginator->lastItemOnPage);
5864
Assert::same(0, $paginator->offset);
5965
Assert::same(0, $paginator->countdownOffset);
6066
Assert::same(7, $paginator->length);
@@ -72,6 +78,8 @@ test('', function () {
7278
Assert::same(0, $paginator->pageCount);
7379
Assert::same(0, $paginator->firstPage);
7480
Assert::same(0, $paginator->lastPage);
81+
Assert::same(0, $paginator->firstItemOnPage);
82+
Assert::same(0, $paginator->lastItemOnPage);
7583
Assert::same(0, $paginator->offset);
7684
Assert::same(0, $paginator->countdownOffset);
7785
Assert::same(0, $paginator->length);
@@ -89,6 +97,8 @@ test('', function () {
8997
Assert::same(2, $paginator->pageCount);
9098
Assert::same(1, $paginator->firstPage);
9199
Assert::same(2, $paginator->lastPage);
100+
Assert::same(7, $paginator->firstItemOnPage);
101+
Assert::same(7, $paginator->lastItemOnPage);
92102
Assert::same(6, $paginator->offset);
93103
Assert::same(0, $paginator->countdownOffset);
94104
Assert::same(1, $paginator->length);
@@ -102,23 +112,31 @@ test('', function () {
102112
$paginator->setItemCount(0);
103113
Assert::true($paginator->isFirst());
104114
Assert::true($paginator->isLast());
115+
Assert::same(0, $paginator->firstItemOnPage);
116+
Assert::same(0, $paginator->lastItemOnPage);
105117

106118

107119
// ItemCount: 1
108120
$paginator->setItemCount(1);
109121
Assert::true($paginator->isFirst());
110122
Assert::true($paginator->isLast());
123+
Assert::same(1, $paginator->firstItemOnPage);
124+
Assert::same(1, $paginator->lastItemOnPage);
111125

112126

113127
// ItemCount: 2
114128
$paginator->setItemCount(2);
115129
Assert::true($paginator->isFirst());
116130
Assert::false($paginator->isLast());
131+
Assert::same(1, $paginator->firstItemOnPage);
132+
Assert::same(1, $paginator->lastItemOnPage);
117133

118134
// Page 2
119135
$paginator->setPage(2);
120136
Assert::false($paginator->isFirst());
121137
Assert::true($paginator->isLast());
138+
Assert::same(2, $paginator->firstItemOnPage);
139+
Assert::same(2, $paginator->lastItemOnPage);
122140
});
123141

124142

@@ -132,6 +150,8 @@ test('', function () {
132150
Assert::null($paginator->pageCount);
133151
Assert::same(0, $paginator->firstPage);
134152
Assert::null($paginator->lastPage);
153+
Assert::same(19, $paginator->firstItemOnPage);
154+
Assert::same(24, $paginator->lastItemOnPage);
135155
Assert::same(18, $paginator->offset);
136156
Assert::null($paginator->countdownOffset);
137157
Assert::same(6, $paginator->length);

0 commit comments

Comments
 (0)