-
-
Notifications
You must be signed in to change notification settings - Fork 6
/
FiltersPresenter.php
68 lines (51 loc) 路 1.61 KB
/
FiltersPresenter.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<?php declare(strict_types = 1);
namespace App\Presenters;
use App\Model\Utils\DateTime;
use App\UI\TEmptyLayoutView;
use Dibi\Fluent;
use Dibi\Row;
use Nette\Utils\ArrayHash;
use Ublaboo\DataGrid\DataGrid;
final class FiltersPresenter extends AbstractPresenter
{
use TEmptyLayoutView;
public function createComponentGrid(): DataGrid
{
$grid = new DataGrid();
$grid->setDataSource($this->dibiConnection->select('*')->from('users'));
$grid->setItemsPerPageList([20, 50, 100], true);
$grid->addColumnText('id', 'Id')
->setFilterText()
->setExactSearch();
$grid->addColumnText('name', 'Name')
->setFilterText();
$grid->addColumnStatus('status', 'Status')
->setFilterSelect([
'' => 'All',
'active' => 'Active',
'inactive' => 'Inactive',
'deleted' => 'Deleted',
]);
$grid->addColumnDateTime('birth_date', 'Birthday')
->setFormat('j. n. Y')
->setSortable()
->setFilterDate();
$grid->addColumnDateTime('birth_date_2', 'Birthday 2', 'birth_date')
->setFormat('j. n. Y')
->setSortable()
->setFilterDateRange();
$grid->addColumnNumber('age', 'Age')
->setRenderer(fn (Row $row): ?int => DateTime::fromSafe($row->asDateTime('birth_date'))?->diff(new DateTime())->y)
->setFilterRange()
->setCondition(function (Fluent $fluent, ArrayHash $values): void {
if ((bool) $values['from']) {
$fluent->where('(YEAR(CURDATE()) - YEAR(birth_date)) >= ?', $values['from']);
}
if ((bool) $values['to']) {
$fluent->where('(YEAR(CURDATE()) - YEAR(birth_date)) <= ?', $values['to']);
}
});
// $grid->setOuterFilterRendering();
return $grid;
}
}