-
Notifications
You must be signed in to change notification settings - Fork 32
Expand file tree
/
Copy pathTalkGrid.php
More file actions
122 lines (115 loc) · 4.22 KB
/
TalkGrid.php
File metadata and controls
122 lines (115 loc) · 4.22 KB
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
<?php
/*
* This file is part of the Sylius package.
*
* (c) Sylius Sp. z o.o.
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
declare(strict_types=1);
namespace App\Grid;
use App\Entity\Conference;
use App\Entity\Talk;
use App\Enum\Track;
use App\Grid\Filter\SpeakerFilter;
use Sylius\Bundle\GridBundle\Builder\Action\CreateAction;
use Sylius\Bundle\GridBundle\Builder\Action\DeleteAction;
use Sylius\Bundle\GridBundle\Builder\Action\ShowAction;
use Sylius\Bundle\GridBundle\Builder\Action\UpdateAction;
use Sylius\Bundle\GridBundle\Builder\ActionGroup\BulkActionGroup;
use Sylius\Bundle\GridBundle\Builder\ActionGroup\ItemActionGroup;
use Sylius\Bundle\GridBundle\Builder\ActionGroup\MainActionGroup;
use Sylius\Bundle\GridBundle\Builder\Field\DateTimeField;
use Sylius\Bundle\GridBundle\Builder\Field\StringField;
use Sylius\Bundle\GridBundle\Builder\Field\TwigField;
use Sylius\Bundle\GridBundle\Builder\Filter\DateFilter;
use Sylius\Bundle\GridBundle\Builder\Filter\EntityFilter;
use Sylius\Bundle\GridBundle\Builder\Filter\Filter;
use Sylius\Bundle\GridBundle\Builder\Filter\SelectFilter;
use Sylius\Bundle\GridBundle\Builder\GridBuilderInterface;
use Sylius\Bundle\GridBundle\Grid\AbstractGrid;
use Sylius\Bundle\GridBundle\Grid\ResourceAwareGridInterface;
final class TalkGrid extends AbstractGrid implements ResourceAwareGridInterface
{
public static function getName(): string
{
return 'app_admin_talk';
}
public function buildGrid(GridBuilderInterface $gridBuilder): void
{
$gridBuilder
->addOrderBy('startsAt')
->setLimits([10, 25, 50])
->addFilter(
EntityFilter::create('conference', Conference::class)
->setLabel('app.ui.conference')
->addFormOption('choice_label', 'name'),
)
->addFilter(
Filter::create(name: 'speaker', type: SpeakerFilter::class)
->setLabel('app.ui.speaker')
->setFormOptions(['multiple' => true])
->setOptions(['fields' => ['speakers.id']]),
)
->addFilter(
DateFilter::create('startsAt')
->setLabel('app.ui.starts_at'),
)
->addFilter(
SelectFilter::create('track', [
'app.ui.biz' => Track::BIZ->value,
'app.ui.tech_one' => Track::TECH_ONE->value,
'app.ui.tech_two' => Track::TECH_TWO->value,
])
->setLabel('app.ui.track'),
)
->addField(
TwigField::create('avatar', 'talk/grid/field/images.html.twig')
->setPath('speakers')
->setLabel('app.ui.avatar'),
)
->addField(
TwigField::create('speakers', 'talk/grid/field/speakers.html.twig')
->setLabel('app.ui.speakers'),
)
->addField(
StringField::create('title')
->setLabel('app.ui.title')
->setSortable(true),
)
->addField(
DateTimeField::create('startsAt', 'Y-m-d H:i')
->setLabel('app.ui.starts_at')
->setSortable(true),
)
->addActionGroup(
MainActionGroup::create(
CreateAction::create(),
),
)
->addActionGroup(
ItemActionGroup::create(
ShowAction::create()
->setOptions([
'link' => [
'url' => 'resource.videoUrl',
],
])
->setIcon('tabler:video'),
UpdateAction::create(),
DeleteAction::create(),
),
)
->addActionGroup(
BulkActionGroup::create(
DeleteAction::create(),
),
)
;
}
public function getResourceClass(): string
{
return Talk::class;
}
}