From 94c0fd7c429e8245484a3af0cc8d7b2c43db6931 Mon Sep 17 00:00:00 2001 From: Charles Date: Tue, 25 Nov 2025 15:03:57 +0100 Subject: [PATCH] Added remote filtering --- assets/controllers/organization_controller.js | 16 ++++++++++ src/Controller/OrganizationController.php | 30 ++++++------------- 2 files changed, 25 insertions(+), 21 deletions(-) diff --git a/assets/controllers/organization_controller.js b/assets/controllers/organization_controller.js index 127d7c7..446de27 100644 --- a/assets/controllers/organization_controller.js +++ b/assets/controllers/organization_controller.js @@ -27,6 +27,22 @@ export default class extends Controller { ajaxResponse: (url, params, response) => response, paginationDataSent: { page: "page", size: "size" }, paginationDataReceived: { last_page: "last_page" }, + filterMode: "remote", + + ajaxURLGenerator: function(url, config, params) { + let queryParams = new URLSearchParams(); + queryParams.append('page', params.page || 1); + queryParams.append('size', params.size || 10); + + // Add filters + if (params.filter) { + params.filter.forEach(filter => { + queryParams.append(`filter[${filter.field}]`, filter.value); + }); + } + + return `${url}?${queryParams.toString()}`; + }, ajaxSorting: true, ajaxFiltering: true, diff --git a/src/Controller/OrganizationController.php b/src/Controller/OrganizationController.php index 1ce36ec..0d74bd2 100644 --- a/src/Controller/OrganizationController.php +++ b/src/Controller/OrganizationController.php @@ -273,8 +273,7 @@ class OrganizationController extends AbstractController $page = max(1, (int)$request->query->get('page', 1)); $size = max(1, (int)$request->query->get('size', 10)); -// $sorters = $request->query->all('sorters'); -// $filters = $request->query->all('filters'); + $filters = $request->query->all('filter'); $user = $this->userService->getUserByIdentifier($this->getUser()->getUserIdentifier()); @@ -282,25 +281,14 @@ class OrganizationController extends AbstractController $qb = $this->organizationsRepository->createQueryBuilder('o') ->where('o.isDeleted = :del')->setParameter('del', false); -// // Example: apply filters (basic equals/like) -// foreach ($filters as $f) { -// if (!isset($f['field'], $f['type'])) { continue; } -// $param = 'p_' . $f['field']; -// if ($f['type'] === 'like' || $f['type'] === 'contains') { -// $qb->andWhere("LOWER(o.{$f['field']}) LIKE :$param") -// ->setParameter($param, '%' . mb_strtolower((string)$f['value']) . '%'); -// } elseif ($f['type'] === '=') { -// $qb->andWhere("o.{$f['field']} = :$param") -// ->setParameter($param, $f['value']); -// } -// } -// -// // Example: apply sorters -// foreach ($sorters as $s) { -// if (!isset($s['field'], $s['dir'])) { continue; } -// $dir = strtolower($s['dir']) === 'desc' ? 'DESC' : 'ASC'; -// $qb->addOrderBy('o.' . $s['field'], $dir); -// } + if (!empty($filters['name'])) { + $qb->andWhere('o.name LIKE :name') + ->setParameter('name', '%' . $filters['name'] . '%'); + } + if (!empty($filters['email'])) { + $qb->andWhere('o.email LIKE :email') + ->setParameter('email', '%' . $filters['email'] . '%'); + } // Count total $countQb = clone $qb;