From 9d541410c4d1d763d485f14c1dfcb002bf2415a1 Mon Sep 17 00:00:00 2001 From: Charles Date: Tue, 25 Nov 2025 14:43:59 +0100 Subject: [PATCH] Added remote filtering to users in organization dashboard --- assets/controllers/user_controller.js | 18 ++++++++++++++++++ src/Controller/UserController.php | 20 +++++++++++++++++--- 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/assets/controllers/user_controller.js b/assets/controllers/user_controller.js index 52050ac..61e1d4f 100644 --- a/assets/controllers/user_controller.js +++ b/assets/controllers/user_controller.js @@ -806,6 +806,24 @@ export default class extends Controller { ajaxSorting: true, ajaxFiltering: true, + filterMode: "remote", + + ajaxURLGenerator: function(url, config, params) { + let queryParams = new URLSearchParams(); + // console.log("orgId:", params.orgId); + queryParams.append('orgId', params.orgId); + 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()}`; + }, rowHeight: 60, layout: "fitColumns", // activate French diff --git a/src/Controller/UserController.php b/src/Controller/UserController.php index f1106ca..ea3a955 100644 --- a/src/Controller/UserController.php +++ b/src/Controller/UserController.php @@ -663,16 +663,30 @@ class UserController extends AbstractController $page = max(1, (int)$request->query->get('page', 1)); $size = max(1, (int)$request->query->get('size', 10)); - // Optional: read Tabulator remote sort/filter payloads - // $sorters = $request->query->all('sorters') ?? []; - // $filters = $request->query->all('filters') ?? []; + $filters = $request->query->all('filter') ?? []; $repo = $this->uoRepository; // Base query $qb = $repo->createQueryBuilder('uo') + ->join('uo.users', 'u') ->where('uo.organization = :orgId') ->setParameter('orgId', $orgId); + + // Apply filters + if (!empty($filters['name'])) { + $qb->andWhere('u.surname LIKE :name') + ->setParameter('name', '%' . $filters['name'] . '%'); + } + if (!empty($filters['prenom'])) { + $qb->andWhere('u.name LIKE :prenom') + ->setParameter('prenom', '%' . $filters['prenom'] . '%'); + } + if (!empty($filters['email'])) { + $qb->andWhere('u.email LIKE :email') + ->setParameter('email', '%' . $filters['email'] . '%'); + } + $countQb = clone $qb; $total = (int)$countQb->select('COUNT(uo.id)')->getQuery()->getSingleScalarResult();