Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
94.74% covered (success)
94.74%
18 / 19
50.00% covered (danger)
50.00%
1 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
CollectionPager
94.74% covered (success)
94.74%
18 / 19
50.00% covered (danger)
50.00%
1 / 2
7.01
0.00% covered (danger)
0.00%
0 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 from
94.44% covered (success)
94.44%
17 / 18
0.00% covered (danger)
0.00%
0 / 1
6.01
1<?php
2
3declare(strict_types=1);
4
5namespace Cosray\Panel;
6
7final class CollectionPager
8{
9    private function __construct(
10        public readonly int $total,
11        public readonly int $pageCount,
12        public readonly int $currentPage,
13        public readonly int $rangeStart,
14        public readonly int $rangeEnd,
15        public readonly ?string $previousUrl,
16        public readonly ?string $nextUrl,
17    ) {}
18
19    public static function from(int $total, int $rowCount, CollectionUrls $urls): self
20    {
21        $query = $urls->query;
22        $pageCount = $query->limit > 0 ? max(1, (int) ceil($total / $query->limit)) : 1;
23        $currentPage = $query->limit > 0
24            ? min($pageCount, (int) floor($query->offset / $query->limit) + 1)
25            : 1;
26
27        return new self(
28            total: $total,
29            pageCount: $pageCount,
30            currentPage: $currentPage,
31            rangeStart: $total === 0 ? 0 : min($query->offset + 1, $total),
32            rangeEnd: min($query->offset + $rowCount, $total),
33            previousUrl: $query->offset > 0
34                ? $urls->collection(['offset' => max(0, $query->offset - $query->limit)])
35                : null,
36            nextUrl: ($query->offset + $query->limit) < $total
37                ? $urls->collection(['offset' => $query->offset + $query->limit])
38                : null,
39        );
40    }
41}