From 31a10322df1a9a5625cc5368c4a7543bd6dc3cb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pavel=20Konvi=C4=8Dka?= Date: Mon, 29 Jun 2026 09:50:58 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20v=C3=BDchoz=C3=AD=20blokov=C4=9B=20zaro?= =?UTF-8?q?vnan=C3=A9=20okno=20str=C3=A1nek=20v=20paginatoru?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Component/DataGridPaginator.php | 35 +++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/src/Component/DataGridPaginator.php b/src/Component/DataGridPaginator.php index eaa54d1..77c7cc1 100644 --- a/src/Component/DataGridPaginator.php +++ b/src/Component/DataGridPaginator.php @@ -5,14 +5,49 @@ namespace ADT\Datagrid\Component; use Nette; +use Nette\Utils\Paginator; /** * @property-read Nette\Application\UI\ITemplate $template */ class DataGridPaginator extends \Contributte\Datagrid\Components\DatagridPaginator\DatagridPaginator { + private const int WINDOW_SIZE = 6; + public function getTemplateFile(): string { return __DIR__ . '/DataGridPaginator.latte'; } + + public function render(): void + { + $this->getTemplate()->steps = $this->computeWindowSteps($this->getPaginator()); + parent::render(); + } + + /** + * @return int[] + */ + private function computeWindowSteps(Paginator $paginator): array + { + if ($paginator->pageCount < 2) { + return [$paginator->page]; + } + + $first = $paginator->firstPage; + $last = $paginator->lastPage; + + $blockIndex = intdiv($paginator->page - $first, self::WINDOW_SIZE); + $start = $first + $blockIndex * self::WINDOW_SIZE; + $end = min($last, $start + self::WINDOW_SIZE - 1); + + $steps = range($start, $end); + $steps[] = $first; + $steps[] = $last; + + $steps = array_values(array_unique($steps)); + sort($steps); + + return $steps; + } }