Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
CRAP
100.00% covered (success)
100.00%
1 / 1
GridResult
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
2
1<?php
2
3declare(strict_types=1);
4
5/** @license For full copyright and license information, please see the LICENSE.md file. */
6
7namespace App\Core\Grid;
8
9defined('AMMONLY_APP') || exit('Direct script access is forbidden.');
10
11/**
12 * DataGrid Result Data Container.
13 *
14 * Holds row dataset, total record count, pagination metadata, and active request state.
15 *
16 * @package App\Core\Grid
17 */
18final readonly class GridResult
19{
20    public int $totalPages;
21    public int $startRecord;
22    public int $endRecord;
23
24    /**
25     * GridResult constructor.
26     *
27     * @param array<int, array<string, mixed>> $rows         Dataset rows array.
28     * @param int                              $totalRecords Total count of matching records across all pages.
29     * @param GridRequest                      $gridRequest  Active GridRequest state.
30     * @param array<int, Column>               $columns      Array of Column instances.
31     * @param array<string, int>               $statusCounts Record counts grouped by lifecycle status.
32     */
33    public function __construct(
34        public array $rows,
35        public int $totalRecords,
36        public GridRequest $gridRequest,
37        public array $columns = [],
38        public array $statusCounts = [],
39    ) {
40        $this->totalPages = (int) ceil($totalRecords / max(1, $gridRequest->limit));
41        $this->startRecord = $totalRecords > 0 ? (($gridRequest->page - 1) * $gridRequest->limit) + 1 : 0;
42        $this->endRecord = min($totalRecords, $gridRequest->page * $gridRequest->limit);
43    }
44}