diff --git a/src/Component/DataGridPaginator.latte b/src/Component/DataGridPaginator.latte
index 40ac7ff..915a96c 100644
--- a/src/Component/DataGridPaginator.latte
+++ b/src/Component/DataGridPaginator.latte
@@ -6,7 +6,7 @@
{var $link = [$control->getParent(), link]}
-
+
{if $paginator->isFirst()}
{else}
diff --git a/src/Component/DataGridPaginator.php b/src/Component/DataGridPaginator.php
index 77c7cc1..58e6eec 100644
--- a/src/Component/DataGridPaginator.php
+++ b/src/Component/DataGridPaginator.php
@@ -12,7 +12,7 @@
*/
class DataGridPaginator extends \Contributte\Datagrid\Components\DatagridPaginator\DatagridPaginator
{
- private const int WINDOW_SIZE = 6;
+ private const int SURROUNDING_PAGES = 2;
public function getTemplateFile(): string
{
@@ -21,29 +21,25 @@ public function getTemplateFile(): string
public function render(): void
{
- $this->getTemplate()->steps = $this->computeWindowSteps($this->getPaginator());
+ $this->getTemplate()->steps = $this->computeSlidingWindowSteps($this->getPaginator());
parent::render();
}
/**
* @return int[]
*/
- private function computeWindowSteps(Paginator $paginator): array
+ private function computeSlidingWindowSteps(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 = range(
+ max($paginator->firstPage, $paginator->page - self::SURROUNDING_PAGES),
+ (int) min($paginator->lastPage, $paginator->page + self::SURROUNDING_PAGES)
+ );
+ $steps[] = $paginator->firstPage;
+ $steps[] = $paginator->lastPage;
$steps = array_values(array_unique($steps));
sort($steps);