diff --git a/src/DataGrid.php b/src/DataGrid.php
index 81e328da..128ddea8 100644
--- a/src/DataGrid.php
+++ b/src/DataGrid.php
@@ -313,6 +313,7 @@ class DataGrid extends Control
/**
* @var bool
+ * @deprecated
*/
protected $outerFilterRendering = false;
@@ -1636,11 +1637,19 @@ public function filterSucceeded(NetteForm $form): void
$this->reload();
}
+
/**
* @return static
*/
public function setOuterFilterRendering(bool $outerFilterRendering = true): self
{
+ $this->onFiltersAssembled['setOuterFilterRendering'] = function (iterable $filters) use ($outerFilterRendering) {
+ /** @var Filter $filter */
+ foreach ($filters as $filter) {
+ $filter->setOuterRendering($outerFilterRendering);
+ }
+ };
+
$this->outerFilterRendering = $outerFilterRendering;
return $this;
@@ -1649,10 +1658,28 @@ public function setOuterFilterRendering(bool $outerFilterRendering = true): self
public function hasOuterFilterRendering(): bool
{
- return $this->outerFilterRendering;
+ foreach ($this->filters as $filter) {
+ if ($filter->hasOuterRendering()) {
+ return true;
+ }
+ }
+
+ return false;
}
+ public function hasColumnFilterRendering(): bool
+ {
+ foreach ($this->filters as $filter) {
+ if (!$filter->hasOuterRendering()) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+
/**
* @return static
* @throws InvalidArgumentException
diff --git a/src/Filter/Filter.php b/src/Filter/Filter.php
index 18e13813..0b50c3e7 100644
--- a/src/Filter/Filter.php
+++ b/src/Filter/Filter.php
@@ -61,6 +61,11 @@ abstract class Filter
'class' => ['form-control', 'input-sm', 'form-control-sm'],
];
+ /**
+ * @var bool
+ */
+ protected $outerRendering = false;
+
/**
* @var string|null
*/
@@ -192,6 +197,23 @@ public function getType(): ?string
}
+ /**
+ * @return static
+ */
+ public function setOuterRendering(bool $outerRendering = true): self
+ {
+ $this->outerRendering = $outerRendering;
+
+ return $this;
+ }
+
+
+ public function hasOuterRendering(): bool
+ {
+ return $this->outerRendering;
+ }
+
+
/**
* @param mixed $value
* @return static
diff --git a/src/templates/datagrid.latte b/src/templates/datagrid.latte
index 3a70f59b..e62588e2 100644
--- a/src/templates/datagrid.latte
+++ b/src/templates/datagrid.latte
@@ -40,6 +40,8 @@
{var $i = 0}
{var $filterColumnsClass = 'col-sm-' . (12 / $control->getOuterFilterColumnsCount())}
+ {continueIf !$f->hasOuterRendering()}
+
{**
* Each fitler is rendered separately in its own template
*}
@@ -138,7 +140,7 @@
-
+ |
|
{foreach $columns as $key => $column}
@@ -196,12 +198,12 @@
{='ublaboo_datagrid.action'|translate}
-
+
{foreach $columns as $key => $column}
{var $th = $column->getElementForRender('th', $key)}
{$th->startTag()|noescape}
{var $col_header = 'col-filter-' . $key . '-header'}
- {if !$control->hasOuterFilterRendering() && isset($filters[$key])}
+ {if isset($filters[$key]) && !$filters[$key]->hasOuterRendering()}
{var $i = $filter['filter'][$key]}
{var $filter_block = 'filter-' . $filters[$key]->getKey()}
@@ -221,7 +223,7 @@
{$th->endTag()|noescape}
{/foreach}
- {if !$control->hasAutoSubmit() && !$control->hasOuterFilterRendering()}
+ {if !$control->hasAutoSubmit() && $control->hasColumnFilterRendering()}
{input $filter['filter']['submit']}
{/if}
|
diff --git a/tests/Cases/FilterTest.phpt b/tests/Cases/FilterTest.phpt
index 2734f997..c6a74fc8 100644
--- a/tests/Cases/FilterTest.phpt
+++ b/tests/Cases/FilterTest.phpt
@@ -10,6 +10,7 @@ use Nette\Application\AbortException;
use Tester\Assert;
use Tester\TestCase;
use Ublaboo\DataGrid\DataGrid;
+use Ublaboo\DataGrid\Tests\Files\TestingDataGridFactory;
use Ublaboo\DataGrid\Tests\Files\TestingDataGridFactoryRouter;
final class FilterTest extends TestCase
@@ -27,6 +28,37 @@ final class FilterTest extends TestCase
}, AbortException::class);
}
+ public function testFilterRendering(): void
+ {
+ $factory = new TestingDataGridFactory();
+ /** @var DataGrid $grid */
+ $grid = $factory->createTestingDataGrid();
+
+ $grid->addFilterText('default', 'default');
+ $grid->assembleFilters();
+ Assert::false($grid->hasOuterFilterRendering());
+ Assert::true($grid->hasColumnFilterRendering());
+
+ $grid->setOuterFilterRendering();
+ $grid->assembleFilters();
+ Assert::true($grid->hasOuterFilterRendering());
+ Assert::false($grid->hasColumnFilterRendering());
+
+ $grid->removeFilter('default');
+ $filters = $grid->assembleFilters();
+ Assert::count(0, $filters);
+
+ $grid->addFilterText('outerFilter', 'outerFilter')
+ ->setOuterRendering();
+ $grid->assembleFilters();
+ Assert::true($grid->hasOuterFilterRendering());
+ Assert::false($grid->hasColumnFilterRendering());
+
+ $grid->addFilterText('columnFilter', 'columnFilter');
+ Assert::true($grid->hasOuterFilterRendering());
+ Assert::true($grid->hasColumnFilterRendering());
+ }
+
}
(new FilterTest)->run();