From 393e3ef41f45131f0b87e2656c01612f1fafaa23 Mon Sep 17 00:00:00 2001 From: Brock H Caldwell Date: Sun, 1 Jun 2025 14:07:29 -0500 Subject: [PATCH] fix: monitors page & pagination --- .../Repository/DownloadRepository.php | 4 +-- .../Framework/Controller/WebController.php | 31 +++++++++++++++++++ .../Repository/MonitorRepository.php | 2 +- src/Twig/Components/MonitorList.php | 16 +++++++--- src/Twig/Components/PaginateTrait.php | 22 +++++++++++++ templates/components/MonitorList.html.twig | 4 +-- templates/components/NavBar.html.twig | 9 ++++++ templates/monitor/index.html.twig | 12 +++++++ 8 files changed, 90 insertions(+), 10 deletions(-) create mode 100644 src/Monitor/Framework/Controller/WebController.php create mode 100644 src/Twig/Components/PaginateTrait.php create mode 100644 templates/monitor/index.html.twig diff --git a/src/Download/Framework/Repository/DownloadRepository.php b/src/Download/Framework/Repository/DownloadRepository.php index 5b32f74..e6b4b31 100644 --- a/src/Download/Framework/Repository/DownloadRepository.php +++ b/src/Download/Framework/Repository/DownloadRepository.php @@ -25,7 +25,7 @@ class DownloadRepository extends ServiceEntityRepository $this->paginator = $paginator; } - public function getCompletePaginated(UserInterface $user, int $pageNumber = 1, int $perPage = 10) + public function getCompletePaginated(UserInterface $user, int $pageNumber = 1, int $perPage = 10): Paginator { $query = $this->createQueryBuilder('d') ->andWhere('d.status IN (:statuses)') @@ -38,7 +38,7 @@ class DownloadRepository extends ServiceEntityRepository return $this->paginator->paginate($query, $pageNumber, $perPage); } - public function getActivePaginated(UserInterface $user, int $pageNumber = 1, int $perPage = 5) + public function getActivePaginated(UserInterface $user, int $pageNumber = 1, int $perPage = 5): Paginator { $query = $this->createQueryBuilder('d') ->andWhere('d.status IN (:statuses)') diff --git a/src/Monitor/Framework/Controller/WebController.php b/src/Monitor/Framework/Controller/WebController.php new file mode 100644 index 0000000..93b99cd --- /dev/null +++ b/src/Monitor/Framework/Controller/WebController.php @@ -0,0 +1,31 @@ +render('monitor/index.html.twig'); + } +} diff --git a/src/Monitor/Framework/Repository/MonitorRepository.php b/src/Monitor/Framework/Repository/MonitorRepository.php index 8ba2e00..f1068cb 100644 --- a/src/Monitor/Framework/Repository/MonitorRepository.php +++ b/src/Monitor/Framework/Repository/MonitorRepository.php @@ -21,7 +21,7 @@ class MonitorRepository extends ServiceEntityRepository $this->paginator = $paginator; } - public function getUserMonitorsPaginated(UserInterface $user, int $page, int $perPage) + public function getUserMonitorsPaginated(UserInterface $user, int $page, int $perPage): Paginator { $query = $this->createQueryBuilder('m') ->andWhere('m.status IN (:statuses)') diff --git a/src/Twig/Components/MonitorList.php b/src/Twig/Components/MonitorList.php index e44bc0f..b5a04ce 100644 --- a/src/Twig/Components/MonitorList.php +++ b/src/Twig/Components/MonitorList.php @@ -4,13 +4,19 @@ namespace App\Twig\Components; use App\Monitor\Framework\Repository\MonitorRepository; 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\TwigComponent\Attribute\AsTwigComponent; +use Symfony\UX\LiveComponent\Attribute\LiveProp; +use Symfony\UX\LiveComponent\DefaultActionTrait; -#[AsTwigComponent] +#[AsLiveComponent] final class MonitorList extends AbstractController { + use DefaultActionTrait; + + use PaginateTrait; + + #[LiveProp(writable: true)] public bool $isWidget = true; public function __construct( @@ -18,8 +24,8 @@ final class MonitorList extends AbstractController ) {} #[LiveAction] - public function getUserMonitors(#[LiveArg] int $page = 1, #[LiveArg] int $perPage = 5) + public function getUserMonitors() { - return $this->monitorRepository->getUserMonitorsPaginated($this->getUser(), $page, $perPage); + return $this->monitorRepository->getUserMonitorsPaginated($this->getUser(), $this->pageNumber, $this->perPage); } } diff --git a/src/Twig/Components/PaginateTrait.php b/src/Twig/Components/PaginateTrait.php new file mode 100644 index 0000000..8c1a6a6 --- /dev/null +++ b/src/Twig/Components/PaginateTrait.php @@ -0,0 +1,22 @@ +pageNumber = $page; + } +} diff --git a/templates/components/MonitorList.html.twig b/templates/components/MonitorList.html.twig index 4dc5d05..aea1e68 100644 --- a/templates/components/MonitorList.html.twig +++ b/templates/components/MonitorList.html.twig @@ -61,10 +61,10 @@ {% endfor %} - {% if this.userMonitors.items|length > 5 %} + {% if this.isWidget and this.userMonitors.items|length > 5 %} - View All Monitors + View All Monitors {% endif %} diff --git a/templates/components/NavBar.html.twig b/templates/components/NavBar.html.twig index 6707054..7cd2c6b 100644 --- a/templates/components/NavBar.html.twig +++ b/templates/components/NavBar.html.twig @@ -20,6 +20,15 @@ +
  • + + Monitors + +
  • +
  • diff --git a/templates/monitor/index.html.twig b/templates/monitor/index.html.twig new file mode 100644 index 0000000..d463a2e --- /dev/null +++ b/templates/monitor/index.html.twig @@ -0,0 +1,12 @@ +{% extends 'base.html.twig' %} + +{% block title %}Monitors — Torsearch{% endblock %} +{% block h2 %}Monitors{% endblock %} + +{% block body %} +
    + + + +
    +{% endblock %}