Added remote filtering to users in organization dashboard
This commit is contained in:
parent
a24849abe3
commit
9d541410c4
|
|
@ -806,6 +806,24 @@ export default class extends Controller {
|
||||||
|
|
||||||
ajaxSorting: true,
|
ajaxSorting: true,
|
||||||
ajaxFiltering: 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,
|
rowHeight: 60,
|
||||||
layout: "fitColumns", // activate French
|
layout: "fitColumns", // activate French
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -663,16 +663,30 @@ class UserController extends AbstractController
|
||||||
$page = max(1, (int)$request->query->get('page', 1));
|
$page = max(1, (int)$request->query->get('page', 1));
|
||||||
$size = max(1, (int)$request->query->get('size', 10));
|
$size = max(1, (int)$request->query->get('size', 10));
|
||||||
|
|
||||||
// Optional: read Tabulator remote sort/filter payloads
|
$filters = $request->query->all('filter') ?? [];
|
||||||
// $sorters = $request->query->all('sorters') ?? [];
|
|
||||||
// $filters = $request->query->all('filters') ?? [];
|
|
||||||
|
|
||||||
$repo = $this->uoRepository;
|
$repo = $this->uoRepository;
|
||||||
|
|
||||||
// Base query
|
// Base query
|
||||||
$qb = $repo->createQueryBuilder('uo')
|
$qb = $repo->createQueryBuilder('uo')
|
||||||
|
->join('uo.users', 'u')
|
||||||
->where('uo.organization = :orgId')
|
->where('uo.organization = :orgId')
|
||||||
->setParameter('orgId', $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;
|
$countQb = clone $qb;
|
||||||
$total = (int)$countQb->select('COUNT(uo.id)')->getQuery()->getSingleScalarResult();
|
$total = (int)$countQb->select('COUNT(uo.id)')->getQuery()->getSingleScalarResult();
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue