-
Notifications
You must be signed in to change notification settings - Fork 344
/
GridBuilder.php
133 lines (108 loc) · 3.17 KB
/
GridBuilder.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
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
123
124
125
126
127
128
129
130
131
132
133
<?php
namespace APY\DataGridBundle\Grid;
use APY\DataGridBundle\Grid\Column\Column;
use APY\DataGridBundle\Grid\Exception\InvalidArgumentException;
use APY\DataGridBundle\Grid\Exception\UnexpectedTypeException;
use Symfony\Component\DependencyInjection\Container;
use Twig\Environment ;
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
/**
* A builder for creating Grid instances.
*
* @author Quentin Ferrer
*/
class GridBuilder extends GridConfigBuilder implements GridBuilderInterface
{
/**
* The container.
*/
private Container $container;
private AuthorizationCheckerInterface $securityContext;
private Environment $twig;
/**
* The factory.
*/
private GridFactoryInterface $factory;
/**
* Columns of the grid builder.
*
* @var Column[]
*/
private array $columns = [];
/**
* Constructor.
*
* @param Container $container The service container
* @param GridFactoryInterface $factory The grid factory
* @param string $name The name of the grid
* @param array $options The options of the grid
*/
public function __construct(Container $container, AuthorizationCheckerInterface $securityContext, Environment $twig, GridFactoryInterface $factory, $name, array $options = [])
{
parent::__construct($name, $options);
$this->container = $container;
$this->factory = $factory;
$this->securityContext = $securityContext;
$this->twig = $twig;
}
/**
* {@inheritdoc}
*/
public function add($name, $type, array $options = [])
{
if (!$type instanceof Column) {
if (!is_string($type)) {
throw new UnexpectedTypeException($type, 'string, APY\DataGridBundle\Grid\Column\Column');
}
$type = $this->factory->createColumn($name, $type, $options);
}
$this->columns[$name] = $type;
return $this;
}
/**
* {@inheritdoc}
*/
public function get($name)
{
if (!$this->has($name)) {
throw new InvalidArgumentException(sprintf('The column with the name "%s" does not exist.', $name));
}
$column = $this->columns[$name];
return $column;
}
/**
* {@inheritdoc}
*/
public function has($name)
{
return isset($this->columns[$name]);
}
/**
* {@inheritdoc}
*/
public function remove($name)
{
unset($this->columns[$name]);
return $this;
}
/**
* {@inheritdoc}
*/
public function getGrid()
{
$config = $this->getGridConfig();
$grid = new Grid($this->container, $this->securityContext, $this->twig, $config->getName(), $config);
foreach ($this->columns as $column) {
$grid->addColumn($column);
}
if (!empty($this->actions)) {
foreach ($this->actions as $columnId => $actions) {
foreach ($actions as $action) {
$grid->addRowAction($action);
}
}
}
$grid->initialize();
return $grid;
}
}