feat: adds page to list child monitors

This commit is contained in:
Brock H Caldwell
2025-11-05 22:19:11 -06:00
parent 3001e85715
commit 55ab9d840e
4 changed files with 40 additions and 3 deletions

View File

@@ -33,7 +33,6 @@ class Paginator
public function paginate($query, int $page = 1, int $limit = 5): Paginator public function paginate($query, int $page = 1, int $limit = 5): Paginator
{ {
$paginator = new OrmPaginator($query); $paginator = new OrmPaginator($query);
$paginator $paginator
->getQuery() ->getQuery()
->setFirstResult($limit * ($page - 1)) ->setFirstResult($limit * ($page - 1))

View File

@@ -7,6 +7,7 @@ use App\Monitor\Action\Handler\AddMonitorHandler;
use App\Monitor\Action\Handler\DeleteMonitorHandler; use App\Monitor\Action\Handler\DeleteMonitorHandler;
use App\Monitor\Action\Input\AddMonitorInput; use App\Monitor\Action\Input\AddMonitorInput;
use App\Monitor\Action\Input\DeleteMonitorInput; use App\Monitor\Action\Input\DeleteMonitorInput;
use App\Monitor\Framework\Entity\Monitor;
use App\Monitor\Framework\Repository\MonitorRepository; use App\Monitor\Framework\Repository\MonitorRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Bundle\SecurityBundle\Security; use Symfony\Bundle\SecurityBundle\Security;
@@ -34,4 +35,12 @@ class WebController extends AbstractController
{ {
return $this->render('monitor/upcoming-episodes.html.twig'); 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,
]);
}
} }

View File

@@ -17,11 +17,14 @@ final class MonitorList extends AbstractController
use PaginateTrait; use PaginateTrait;
#[LiveProp(writable: true)]
public ?int $parentMonitorId = null;
#[LiveProp(writable: true)] #[LiveProp(writable: true)]
public string $term = ""; public string $term = "";
#[LiveProp(writable: true)] #[LiveProp(writable: true)]
public string $type; public string $type = "";
#[LiveProp(writable: true)] #[LiveProp(writable: true)]
public bool $isWidget = true; public bool $isWidget = true;
@@ -33,7 +36,9 @@ final class MonitorList extends AbstractController
#[LiveAction] #[LiveAction]
public function getMonitors() public function getMonitors()
{ {
if ($this->type === "active") { if (null !== $this->parentMonitorId) {
return $this->getChildMonitorsByParentId($this->parentMonitorId);
} elseif ($this->type === "active") {
return $this->getActiveUserMonitors(); return $this->getActiveUserMonitors();
} elseif ($this->type === "complete") { } elseif ($this->type === "complete") {
return $this->getCompleteUserMonitors(); return $this->getCompleteUserMonitors();
@@ -67,4 +72,16 @@ final class MonitorList extends AbstractController
->getQuery() ->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()
);
}
} }

View File

@@ -0,0 +1,12 @@
{% extends 'base.html.twig' %}
{% block title %}{{ monitor.title }} — Monitors — Torsearch{% endblock %}
{% block h2 %}Monitors{% endblock %}
{% block body %}
<div class="px-4 py-2">
<twig:Card title="Viewing your monitors for {{ monitor.title }}">
<twig:MonitorList :parentMonitorId="monitor.id" :isWidget="false" :perPage="10"></twig:MonitorList>
</twig:Card>
</div>
{% endblock %}