Skip to content

Commit

Permalink
handleRequest() method moved to DataGrid::createView()
Browse files Browse the repository at this point in the history
  • Loading branch information
pfilsx committed Oct 22, 2019
1 parent 09fb2f3 commit 04eabe6
Show file tree
Hide file tree
Showing 15 changed files with 134 additions and 148 deletions.
10 changes: 0 additions & 10 deletions src/Config/Configuration.php
Original file line number Diff line number Diff line change
Expand Up @@ -63,10 +63,6 @@ public function setPaginationLimit(int $limit): void
$this->paginationLimit = $limit;
}

public function setShowTitles(bool $showTitles): void
{
$this->showTitles = $showTitles;
}

public function setTranslationDomain(?string $domain): void
{
Expand All @@ -80,7 +76,6 @@ public function getConfigsArray(): array
'paginationEnabled' => $this->getPaginationEnabled(),
'paginationLimit' => $this->getPaginationLimit(),
'noDataMessage' => $this->getNoDataMessage(),
'showTitles' => $this->getShowTitles(),
'translationDomain' => $this->getTranslationDomain()
];
}
Expand All @@ -107,11 +102,6 @@ public function getPaginationEnabled(): ?bool
return $this->paginationEnabled;
}

public function getShowTitles(): ?bool
{
return $this->showTitles;
}

public function getTranslationDomain(): ?string
{
return $this->translationDomain;
Expand Down
4 changes: 0 additions & 4 deletions src/Config/ConfigurationInterface.php
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,6 @@ public function getPaginationEnabled(): ?bool;

public function setPaginationEnabled(bool $value): void;

public function getShowTitles(): ?bool;

public function setShowTitles(bool $showTitles): void;

public function getTranslationDomain(): ?string;

public function setTranslationDomain(string $domain): void;
Expand Down
3 changes: 0 additions & 3 deletions src/DependencyInjection/Configuration.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@
namespace Pfilsx\DataGrid\DependencyInjection;


use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
use Symfony\Component\Config\Definition\Builder\NodeDefinition;
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
use Symfony\Component\Config\Definition\ConfigurationInterface;

Expand Down Expand Up @@ -37,7 +35,6 @@ public function getConfigTreeBuilder()
->children()
->scalarNode('template')->defaultValue('@DataGrid/grid.blocks.html.twig')->end()
->scalarNode('no_data_message')->defaultValue('No data found')->end()
->scalarNode('show_titles')->defaultValue(true)->end()
->booleanNode('pagination_enabled')->defaultValue(true)->end()
->integerNode('pagination_limit')->defaultValue(10)->end()
->scalarNode('translation_domain')->defaultNull()->end()
Expand Down
152 changes: 115 additions & 37 deletions src/Grid/DataGrid.php
Original file line number Diff line number Diff line change
Expand Up @@ -36,34 +36,56 @@ class DataGrid implements DataGridInterface
* @var Criteria
*/
protected $filtersCriteria;
/**
* @var AbstractGridType
*/
protected $gridType;

/**
* @var DataGridBuilderInterface
*/
protected $builder;
/**
* @var DataGridFiltersBuilderInterface
*/
protected $filterBuilder;

/**
* DataGrid constructor.
* @param DataGridBuilderInterface $builder
* @param AbstractGridType $type
* @param DataProviderInterface $dataProvider
* @param ConfigurationContainerInterface $defaultConfiguration
* @param DataGridServiceContainer $container
* @internal
*/
public function __construct(
DataGridBuilderInterface $builder,
AbstractGridType $type,
DataProviderInterface $dataProvider,
ConfigurationContainerInterface $defaultConfiguration,
DataGridServiceContainer $container
)
{
$this->builder = $builder;
$this->gridType = $type;
$this->container = $container;
$this->configuration = $defaultConfiguration->getInstance($builder->getInstance())->merge($builder->getConfiguration());

$this->configureBuilders($dataProvider);

$this->configuration = $defaultConfiguration->getInstance($this->builder->getInstance())
->merge($this->builder->getConfiguration());

$this->setTemplate($this->configuration->getTemplate());
$this->configurePagerOptions();
if (!empty($this->configuration->getTranslationDomain())){
foreach ($this->builder->getColumns() as $column){
$column->setTranslationDomain($this->configuration->getTranslationDomain());
}
}
$this->setTranslationDomain($this->configuration->getTranslationDomain());

}

protected function configureBuilders(DataProviderInterface $dataProvider)
{
$this->builder = new DataGridBuilder($this->container);
$this->builder->setProvider($dataProvider);
$this->gridType->buildGrid($this->builder);

$this->filterBuilder = new DataGridFiltersBuilder();
$this->filterBuilder->setProvider($dataProvider);
}

/**
Expand All @@ -73,21 +95,14 @@ protected function configurePagerOptions()
{
$pager = $this->builder->getProvider()->getPager();
$pager->setLimit($this->configuration->getPaginationLimit());
if ($this->configuration->getPaginationEnabled()){
if ($this->configuration->getPaginationEnabled()) {
$pager->enable();
$pager->setTotalCount($this->getProvider()->getTotalCount());
$pager->rebuildPaginationOptions();
} else {
$pager->disable();
}
}
/**
* @return bool
* @internal
*/
public function getShowTitles(): bool
{
return $this->configuration->getShowTitles();
}

/**
* @return Providers\DataProviderInterface
Expand Down Expand Up @@ -135,23 +150,8 @@ public function getTemplate()
}

/**
* @internal
* @param string $path
* @throws \Twig\Error\LoaderError
* @throws \Twig\Error\RuntimeError
* @throws \Twig\Error\SyntaxError
*/
protected function setTemplate(string $path)
{
$this->template = $this->container->getTwig()->loadTemplate($path);
foreach ($this->builder->getColumns() as $column){
$column->setTemplate($this->template);
}
}

/**
* @internal
* @return string
* @internal
*/
public function getNoDataMessage()
{
Expand All @@ -161,25 +161,103 @@ public function getNoDataMessage()
}

/**
* @internal
* @return bool
* @internal
*/
public function hasPagination()
{
return $this->builder->hasPagination();
}

/**
* @internal
* @return array
* @internal
*/
public function getPaginationOptions()
{
return $this->builder->getPager()->getPaginationOptions();
}

/**
* @return DataGridView
*/
public function createView(): DataGridView
{
$this->handleRequest();
$this->configurePagerOptions();
return new DataGridView($this, $this->container);
}

/**
* @param string $path
*/
protected function setTemplate(string $path)
{
$this->template = $this->container->getTwig()->loadTemplate($path);
foreach ($this->builder->getColumns() as $column) {
$column->setTemplate($this->template);
}
}

/**
* @param string $domain
*/
protected function setTranslationDomain(?string $domain)
{
foreach ($this->builder->getColumns() as $column) {
$column->setTranslationDomain($domain);
}
}

protected function handleRequest(): void
{
$request = $this->container->getRequest()->getCurrentRequest();
$queryParams = $request !== null ? $request->query->get('data_grid', []) : [];

$this->handleSorting($queryParams);

$this->handlePagination($queryParams);

$this->handleFilters($queryParams);
}

protected function handleSorting(array &$queryParams)
{
if (array_key_exists('sortBy', $queryParams)) {
$this->setSort($queryParams['sortBy']);
unset($queryParams['sortBy']);
}
}

protected function handlePagination(array &$queryParams)
{
if (array_key_exists('page', $queryParams)) {
$this->setPage($queryParams['page']);
unset($queryParams['page']);
} else {
$this->setPage(1);
}
}

protected function handleFilters(array $queryParams)
{
$this->builder->setFiltersValues($queryParams);
$this->filterBuilder->setParams($queryParams);
$this->gridType->handleFilters($this->filterBuilder, $queryParams);
}

protected function setSort($attribute)
{
$first = substr($attribute, 0, 1);
if ($first == '-') {
$this->builder->setSort(substr($attribute, 1), 'DESC');
} else {
$this->builder->setSort($attribute, 'ASC');
}
}

protected function setPage($page)
{
$this->builder->getPager()->setPage(is_numeric($page) ? (int)$page : 1);
}
}
14 changes: 2 additions & 12 deletions src/Grid/DataGridBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -112,16 +112,6 @@ public function setNoDataMessage(string $message): DataGridBuilderInterface
return $this;
}

/**
* @param bool $flag
* @return DataGridBuilderInterface
*/
public function setShowTitles(bool $flag): DataGridBuilderInterface
{
$this->configuration->setShowTitles($flag);
return $this;
}

public function enablePagination(bool $enabled = true, ?int $limit = null): DataGridBuilderInterface
{
$this->configuration->setPaginationEnabled($enabled);
Expand Down Expand Up @@ -164,7 +154,7 @@ public function setProvider(DataProviderInterface $provider): void
public function setSort(string $attribute, string $direction)
{
foreach ($this->columns as $column) {
if ($column->hasSort() && $column->getAttribute() == $attribute) {
if ($column instanceof DataColumn && $column->hasSort() && $column->getAttribute() == $attribute) {
$column->setSort($direction);
$this->provider->setSort([$attribute => $direction]);
break;
Expand All @@ -188,7 +178,7 @@ public function hasFilters(): bool
public function setFiltersValues(array $filters): void
{
foreach ($this->columns as $column) {
if ($column->hasFilter() && array_key_exists($column->getAttribute(), $filters)) {
if ($column instanceof DataColumn && $column->hasFilter() && array_key_exists($column->getAttribute(), $filters)) {
$column->setFilterValue($filters[$column->getAttribute()]);
}
}
Expand Down
9 changes: 6 additions & 3 deletions src/Grid/DataGridBuilderInterface.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,6 @@ public function setTemplate(string $path): self;

public function setNoDataMessage(string $message): self;

public function setShowTitles(bool $flag): self;

public function enablePagination(bool $enabled = true, int $limit = 10): self;

public function setCountFieldName(string $name): self;
Expand Down Expand Up @@ -83,5 +81,10 @@ public function getConfiguration(): ConfigurationInterface;
*/
public function getInstance(): string;


/**
* @param string $attribute
* @param string $direction
* @internal
*/
public function setSort(string $attribute, string $direction);
}

0 comments on commit 04eabe6

Please sign in to comment.