fix: mostly working paginator
This commit is contained in:
@@ -6,6 +6,8 @@ use App\Download\Framework\Repository\DownloadRepository;
|
||||
use App\Util\Paginator;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||
use Symfony\UX\LiveComponent\Attribute\AsLiveComponent;
|
||||
use Symfony\UX\LiveComponent\Attribute\LiveAction;
|
||||
use Symfony\UX\LiveComponent\Attribute\LiveArg;
|
||||
use Symfony\UX\LiveComponent\Attribute\LiveProp;
|
||||
use Symfony\UX\LiveComponent\DefaultActionTrait;
|
||||
|
||||
@@ -14,6 +16,7 @@ final class DownloadList extends AbstractController
|
||||
{
|
||||
use DefaultActionTrait;
|
||||
|
||||
#[LiveProp(writable: true)]
|
||||
public string $type;
|
||||
|
||||
#[LiveProp(writable: true)]
|
||||
@@ -39,4 +42,10 @@ final class DownloadList extends AbstractController
|
||||
|
||||
return [];
|
||||
}
|
||||
|
||||
#[LiveAction]
|
||||
public function paginate(#[LiveArg] int $page)
|
||||
{
|
||||
$this->pageNumber = $page;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,6 +20,8 @@ class Paginator
|
||||
|
||||
private $items;
|
||||
|
||||
public $currentPage = 1;
|
||||
|
||||
/**
|
||||
* @param QueryBuilder|Query $query
|
||||
* @param int $page
|
||||
@@ -38,6 +40,7 @@ class Paginator
|
||||
$this->total = $paginator->count();
|
||||
$this->lastPage = (int) ceil($paginator->count() / $paginator->getQuery()->getMaxResults());
|
||||
$this->items = $paginator;
|
||||
$this->currentPage = $page;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
{% set _currentPage = app.request.query.get('page') ?: 1 %}
|
||||
{% set _currentRoute = app.request.attributes.get('_route') %}
|
||||
{% set _currentPage = paginator.currentPage ?: 1 %}
|
||||
{% set _lastPage = paginator.lastPage %}
|
||||
{% set _currentParams = app.request.query.all|merge(app.request.attributes.get('_route_params')) %}
|
||||
{% set _showingPerPage = (_currentPage == _lastPage) ? paginator.total - (this.perPage * (_lastPage - 1)) : paginator.items.query.maxResults %}
|
||||
|
||||
<p class="text-white mt-1">Showing {{ _showingPerPage }} of {{ paginator.total }} results</p>
|
||||
@@ -10,9 +8,15 @@
|
||||
<nav>
|
||||
<ul class="mt-2 flex flex-row justify-content-center gap-1 py-1 text-white text-sm">
|
||||
<li class="page-item{{ _currentPage <= 1 ? ' disabled' : '' }}">
|
||||
<a data-live-action="click->pagination#paginate"
|
||||
data-live-action-page-value="_currentPage - 1"
|
||||
class="page-link px-2.5 py-1 rounded-lg bg-orange-500 align-middle" href="{{ path(_currentRoute, _currentParams|merge({page: _currentPage - 1})) }}" aria-label="Previous">
|
||||
<a {% if _currentPage > 1 %}
|
||||
data-action="click->live#action"
|
||||
data-live-action-param="paginate"
|
||||
data-live-page-param="{{ _currentPage - 1 }}"
|
||||
{% endif %}
|
||||
class="page-link px-2.5 py-1 rounded-lg bg-orange-500 align-middle"
|
||||
aria-label="Previous"
|
||||
href="#"
|
||||
>
|
||||
«
|
||||
</a>
|
||||
</li>
|
||||
@@ -20,9 +24,13 @@
|
||||
{% set endPage = min(_lastPage, startPage + 4) %}
|
||||
{% if startPage > 1 %}
|
||||
<li class="page-item">
|
||||
<a data-live-action="click->pagination#paginate"
|
||||
data-live-action-page-value="1"
|
||||
class="page-link px-2.5 py-1 rounded-lg bg-orange-500 align-middle" href="{{ path(_currentRoute, _currentParams|merge({page: 1})) }}">1</a>
|
||||
<a data-action="click->live#action"
|
||||
data-live-action-param="paginate"
|
||||
data-live-page-param="{{ "1"|number_format }}"
|
||||
class="page-link px-2.5 py-1 rounded-lg bg-orange-500 align-middle"
|
||||
aria-label="Next"
|
||||
href="#"
|
||||
>1</a>
|
||||
</li>
|
||||
{% if startPage > 2 %}
|
||||
<li class="page-item disabled">
|
||||
@@ -32,7 +40,7 @@
|
||||
{% endif %}
|
||||
{% for i in startPage..endPage %}
|
||||
<li class="page-item {% if i == _currentPage %}active{% endif %}">
|
||||
<a class="page-link px-2.5 py-1 rounded-lg bg-orange-500 align-middle" href="#">{{ i }}</a>
|
||||
<a class="page-link px-2.5 py-1 rounded-lg bg-gray-50 border border-orange-500 text-orange-500 align-middle" href="#">{{ i }}</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
{% if endPage < _lastPage %}
|
||||
@@ -42,11 +50,25 @@
|
||||
</li>
|
||||
{% endif %}
|
||||
<li class="page-item">
|
||||
<a class="page-link px-2.5 py-1 rounded-lg bg-orange-500 align-middle" href="{{ path(_currentRoute, _currentParams|merge({page: _lastPage})) }}">{{ _lastPage }}</a>
|
||||
<a data-action="click->live#action"
|
||||
data-live-action-param="paginate"
|
||||
data-live-page-param="{{ _lastPage }}"
|
||||
class="page-link px-2.5 py-1 rounded-lg bg-orange-500 align-middle"
|
||||
aria-label="Next"
|
||||
href="#"
|
||||
>{{ _lastPage }}</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
<li class="page-item {{ _currentPage >= paginator.lastPage ? ' disabled' : '' }}">
|
||||
<a class="page-link px-2.5 py-1 rounded-lg bg-orange-500 align-middle" href="{{ path(_currentRoute, _currentParams|merge({page: _currentPage + 1})) }}" aria-label="Next">
|
||||
<a {% if _currentPage < _lastPage %}
|
||||
data-action="click->live#action"
|
||||
data-live-action-param="paginate"
|
||||
data-live-page-param="{{ _currentPage + 1 }}"
|
||||
{% endif %}
|
||||
class="page-link px-2.5 py-1 rounded-lg bg-orange-500 align-middle"
|
||||
aria-label="Next"
|
||||
href="#"
|
||||
>
|
||||
»
|
||||
</a>
|
||||
</li>
|
||||
|
||||
Reference in New Issue
Block a user