From 55ab9d840e49c433a3301faa03e6f941a2824fd0 Mon Sep 17 00:00:00 2001 From: Brock H Caldwell Date: Wed, 5 Nov 2025 22:19:11 -0600 Subject: [PATCH] feat: adds page to list child monitors --- src/Base/Util/Paginator.php | 1 - .../Framework/Controller/WebController.php | 9 ++++++++ src/Twig/Components/MonitorList.php | 21 +++++++++++++++++-- templates/monitor/view.html.twig | 12 +++++++++++ 4 files changed, 40 insertions(+), 3 deletions(-) create mode 100644 templates/monitor/view.html.twig diff --git a/src/Base/Util/Paginator.php b/src/Base/Util/Paginator.php index cbff1d2..b6a9a40 100644 --- a/src/Base/Util/Paginator.php +++ b/src/Base/Util/Paginator.php @@ -33,7 +33,6 @@ class Paginator public function paginate($query, int $page = 1, int $limit = 5): Paginator { $paginator = new OrmPaginator($query); - $paginator ->getQuery() ->setFirstResult($limit * ($page - 1)) diff --git a/src/Monitor/Framework/Controller/WebController.php b/src/Monitor/Framework/Controller/WebController.php index 0a9ec06..044fcf4 100644 --- a/src/Monitor/Framework/Controller/WebController.php +++ b/src/Monitor/Framework/Controller/WebController.php @@ -7,6 +7,7 @@ use App\Monitor\Action\Handler\AddMonitorHandler; use App\Monitor\Action\Handler\DeleteMonitorHandler; use App\Monitor\Action\Input\AddMonitorInput; use App\Monitor\Action\Input\DeleteMonitorInput; +use App\Monitor\Framework\Entity\Monitor; use App\Monitor\Framework\Repository\MonitorRepository; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Bundle\SecurityBundle\Security; @@ -34,4 +35,12 @@ class WebController extends AbstractController { return $this->render('monitor/upcoming-episodes.html.twig'); } + + #[Route('/monitors/{id}', name: 'app.monitor.view', methods: ['GET'])] + public function viewMonitor(Monitor $monitor) + { + return $this->render('monitor/view.html.twig', [ + 'monitor' => $monitor, + ]); + } } diff --git a/src/Twig/Components/MonitorList.php b/src/Twig/Components/MonitorList.php index 8e91acc..2b80aec 100644 --- a/src/Twig/Components/MonitorList.php +++ b/src/Twig/Components/MonitorList.php @@ -17,11 +17,14 @@ final class MonitorList extends AbstractController use PaginateTrait; + #[LiveProp(writable: true)] + public ?int $parentMonitorId = null; + #[LiveProp(writable: true)] public string $term = ""; #[LiveProp(writable: true)] - public string $type; + public string $type = ""; #[LiveProp(writable: true)] public bool $isWidget = true; @@ -33,7 +36,9 @@ final class MonitorList extends AbstractController #[LiveAction] public function getMonitors() { - if ($this->type === "active") { + if (null !== $this->parentMonitorId) { + return $this->getChildMonitorsByParentId($this->parentMonitorId); + } elseif ($this->type === "active") { return $this->getActiveUserMonitors(); } elseif ($this->type === "complete") { return $this->getCompleteUserMonitors(); @@ -67,4 +72,16 @@ final class MonitorList extends AbstractController ->getQuery() ); } + + #[LiveAction] + public function getChildMonitorsByParentId(int $parentId) + { + return $this->asPaginator( + $this->monitorRepository->createQueryBuilder('m') + ->andWhere("m.parent = :parentId") + ->setParameter('parentId', $parentId) + ->orderBy('m.id', 'DESC') + ->getQuery() + ); + } } diff --git a/templates/monitor/view.html.twig b/templates/monitor/view.html.twig new file mode 100644 index 0000000..3986866 --- /dev/null +++ b/templates/monitor/view.html.twig @@ -0,0 +1,12 @@ +{% extends 'base.html.twig' %} + +{% block title %}{{ monitor.title }} — Monitors — Torsearch{% endblock %} +{% block h2 %}Monitors{% endblock %} + +{% block body %} +
+ + + +
+{% endblock %}