From 8967d407cb15a9bd0a0dc5fdffc30a23bdbaccec Mon Sep 17 00:00:00 2001 From: Brock H Caldwell Date: Tue, 13 May 2025 09:07:20 -0500 Subject: [PATCH] fix: adds 'view all ...' button to dashboard widgets --- .../controllers/download_list_controller.js | 1 - .../Repository/MonitorRepository.php | 41 ++++++++----------- src/Twig/Components/DownloadList.php | 2 + src/Twig/Components/MonitorList.php | 11 +++-- src/Util/Paginator.php | 2 +- templates/components/DownloadList.html.twig | 17 ++++++-- templates/components/MonitorList.html.twig | 18 +++++++- templates/partial/paginator.html.twig | 24 ++++++----- 8 files changed, 71 insertions(+), 45 deletions(-) diff --git a/assets/controllers/download_list_controller.js b/assets/controllers/download_list_controller.js index ac1dcec..5e1c867 100644 --- a/assets/controllers/download_list_controller.js +++ b/assets/controllers/download_list_controller.js @@ -24,7 +24,6 @@ export default class extends Controller { downloadTargetConnected(target) { let downloads = this.element.querySelectorAll('tbody tr'); - console.log(downloads.length); if (downloads.length > 5) { target.classList.add('hidden'); } diff --git a/src/Monitor/Framework/Repository/MonitorRepository.php b/src/Monitor/Framework/Repository/MonitorRepository.php index b34d594..8ba2e00 100644 --- a/src/Monitor/Framework/Repository/MonitorRepository.php +++ b/src/Monitor/Framework/Repository/MonitorRepository.php @@ -3,41 +3,34 @@ namespace App\Monitor\Framework\Repository; use App\Monitor\Framework\Entity\Monitor; +use App\Util\Paginator; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\Persistence\ManagerRegistry; +use Symfony\Component\Security\Core\User\UserInterface; /** * @extends ServiceEntityRepository */ class MonitorRepository extends ServiceEntityRepository { - public function __construct(ManagerRegistry $registry) + private Paginator $paginator; + + public function __construct(ManagerRegistry $registry, Paginator $paginator) { parent::__construct($registry, Monitor::class); + $this->paginator = $paginator; } -// /** -// * @return MovieMonitor[] Returns an array of MovieMonitor objects -// */ -// public function findByExampleField($value): array -// { -// return $this->createQueryBuilder('m') -// ->andWhere('m.exampleField = :val') -// ->setParameter('val', $value) -// ->orderBy('m.id', 'ASC') -// ->setMaxResults(10) -// ->getQuery() -// ->getResult() -// ; -// } + public function getUserMonitorsPaginated(UserInterface $user, int $page, int $perPage) + { + $query = $this->createQueryBuilder('m') + ->andWhere('m.status IN (:statuses)') + ->andWhere('m.user = :user') + ->orderBy('m.id', 'ASC') + ->setParameter('statuses', ['Active', 'New', 'In Progress', 'Complete']) + ->setParameter('user', $user) + ->getQuery(); -// public function findOneBySomeField($value): ?MovieMonitor -// { -// return $this->createQueryBuilder('m') -// ->andWhere('m.exampleField = :val') -// ->setParameter('val', $value) -// ->getQuery() -// ->getOneOrNullResult() -// ; -// } + return $this->paginator->paginate($query, $page, $perPage); + } } diff --git a/src/Twig/Components/DownloadList.php b/src/Twig/Components/DownloadList.php index f40f84a..3bf6eed 100644 --- a/src/Twig/Components/DownloadList.php +++ b/src/Twig/Components/DownloadList.php @@ -15,6 +15,8 @@ final class DownloadList extends AbstractController public string $type; + public bool $isWidget = true; + public function __construct( private readonly DownloadRepository $downloadRepository, ) {} diff --git a/src/Twig/Components/MonitorList.php b/src/Twig/Components/MonitorList.php index a8a203b..e44bc0f 100644 --- a/src/Twig/Components/MonitorList.php +++ b/src/Twig/Components/MonitorList.php @@ -4,17 +4,22 @@ namespace App\Twig\Components; use App\Monitor\Framework\Repository\MonitorRepository; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; +use Symfony\UX\LiveComponent\Attribute\LiveAction; +use Symfony\UX\LiveComponent\Attribute\LiveArg; use Symfony\UX\TwigComponent\Attribute\AsTwigComponent; #[AsTwigComponent] final class MonitorList extends AbstractController { + public bool $isWidget = true; + public function __construct( - private MonitorRepository $monitorRepository, + private readonly MonitorRepository $monitorRepository, ) {} - public function getUserMonitors() + #[LiveAction] + public function getUserMonitors(#[LiveArg] int $page = 1, #[LiveArg] int $perPage = 5) { - return $this->getUser()->getMonitors(); + return $this->monitorRepository->getUserMonitorsPaginated($this->getUser(), $page, $perPage); } } diff --git a/src/Util/Paginator.php b/src/Util/Paginator.php index ec39e0d..490a987 100644 --- a/src/Util/Paginator.php +++ b/src/Util/Paginator.php @@ -26,7 +26,7 @@ class Paginator * @param int $limit * @return Paginator */ - public function paginate($query, int $page = 1, int $limit = 10): Paginator + public function paginate($query, int $page = 1, int $limit = 5): Paginator { $paginator = new OrmPaginator($query); diff --git a/templates/components/DownloadList.html.twig b/templates/components/DownloadList.html.twig index afaffbd..4ae8507 100644 --- a/templates/components/DownloadList.html.twig +++ b/templates/components/DownloadList.html.twig @@ -14,7 +14,7 @@ - {% if this.downloads|length > 0 %} + {% if this.downloads.items|length > 0 %} {% for download in this.downloads.items %} @@ -31,6 +31,13 @@ {% endfor %} + {% if this.downloads.items|length > 5 %} + + + View All Monitors + + + {% endif %} {% else %} @@ -41,9 +48,11 @@ - {% if this.downloads.items|length > 0 %} - {% set paginator = this.downloads %} - {% include 'partial/paginator.html.twig' %} + {% if this.isWidget == false %} + {% if this.downloads.items|length > 0 %} + {% set paginator = this.downloads %} + {% include 'partial/paginator.html.twig' %} + {% endif %} {% endif %} diff --git a/templates/components/MonitorList.html.twig b/templates/components/MonitorList.html.twig index 89cc1ac..8691174 100644 --- a/templates/components/MonitorList.html.twig +++ b/templates/components/MonitorList.html.twig @@ -26,8 +26,8 @@ - {% if this.userMonitors()|length > 0 %} - {% for monitor in this.userMonitors() %} + {% if this.userMonitors.items|length > 0 %} + {% for monitor in this.userMonitors.items %} {{ monitor.title }} @@ -52,6 +52,13 @@ {% endfor %} + {% if this.userMonitors.items|length > 5 %} + + + View All Monitors + + + {% endif %} {% else %} @@ -61,5 +68,12 @@ {% endif %} + + {% if this.isWidget == false %} + {% if this.userMonitors.items|length > 0 %} + {% set paginator = this.userMonitors %} + {% include 'partial/paginator.html.twig' %} + {% endif %} + {% endif %} diff --git a/templates/partial/paginator.html.twig b/templates/partial/paginator.html.twig index 78d3f78..9820788 100644 --- a/templates/partial/paginator.html.twig +++ b/templates/partial/paginator.html.twig @@ -5,42 +5,46 @@ {% if paginator.lastPage > 1 %}