Skip to content

Commit 2627b59

Browse files
authored
Merge pull request #6 from makoso/feature/allow-signle-field-filter
Hide filter type selector when only one is enabled
2 parents b460ce7 + 815309a commit 2627b59

File tree

6 files changed

+49
-5
lines changed

6 files changed

+49
-5
lines changed

Form/Type/FilterableType.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ public function buildForm(FormBuilderInterface $builder, array $options)
3535
];
3636
},
3737
'required' => false,
38-
'placeholder' => 'Enable filtering'
38+
'placeholder' => 'Enable filtering',
39+
'data' => $filterGroup->getFilters()->count() === 1 ? $filterGroup->getFilters()->first() : null,
3940
])
4041
->add('value', $filterGroup->getFirstInputType(), $filterGroup->getFirstInputOptions())
4142
->add('value2', $filterGroup->getSecondInputType(), $filterGroup->getSecondInputOptions())
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Makoso\DatagridBundle\Grid\Filter;
6+
7+
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
8+
9+
final class SingleFieldSelectFilter extends FilterGroup
10+
{
11+
public function __construct(array $choiceTypeOptions = [])
12+
{
13+
parent::__construct();
14+
$this->getFilters()->add(new EqualFilter());
15+
16+
$this->setFirstInputType(ChoiceType::class);
17+
$this->setFirstInputOptions($choiceTypeOptions);
18+
}
19+
20+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Makoso\DatagridBundle\Grid\Filter;
6+
7+
final class SingleFieldTextFilter extends FilterGroup
8+
{
9+
public function __construct(FilterInterface $filter)
10+
{
11+
parent::__construct();
12+
$this->filters->add($filter);
13+
}
14+
15+
}

Grid/Grid.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ private function processFilter()
276276
if ($column->isFilterable() && $column->getFilterGroup() != null) {
277277
$filterData = $this->formData[self::GRID_FORM_FILTERABLE_KEY][$column->getName()];
278278

279-
if ($filterData['filterType'] instanceof FilterInterface) {
279+
if ($filterData['filterType'] instanceof FilterInterface && (!empty($filterData['value']) || !empty($filterData['value2']))) {
280280
$column->setFilterableValue(
281281
[
282282
'value' => $filterData['value'],

Resources/public/js/grid.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,11 @@ var Grid = {
189189
});
190190

191191
form.find('select').each(function(){
192-
$(this).prop('selectedIndex', 0).val("");
192+
if(!$(this).hasClass('not-clear')) {
193+
$(this).prop('selectedIndex', 0).val("");
194+
} else {
195+
$(this).prop('selectedIndex', 1).val(0);
196+
}
193197
});
194198

195199
form.find('textarea').each(function(){

Resources/views/AdminLTEBlocks.html.twig

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,10 +61,14 @@
6161
{% endif %}
6262
{% for column in grid.config.columns %}
6363
{% if column.filterable %}
64+
{% set filterTypeClass = 'grid-filter-select' %}
65+
{% if grid.form['filter'][column.name].filterType.vars.choices|length == 1 %}
66+
{% set filterTypeClass = filterTypeClass ~ ' not-clear' %}
67+
{% endif %}
6468
<th style="vertical-align: top;" class="filterable" data-grid-column="{{ column.name }}">
65-
<div class="input-group">
69+
<div class="input-group {% if grid.form['filter'][column.name].filterType.vars.choices|length == 1 %}hidden{% endif %}">
6670
<span class="input-group-addon"><i class="fa fa-filter"></i></span>
67-
{{ form_row(grid.form['filter'][column.name].filterType, {attr: {class: 'grid-filter-select'}}) }}
71+
{{ form_row(grid.form['filter'][column.name].filterType, {attr: {class: filterTypeClass}}) }}
6872
</div>
6973
<div class="input-group">
7074
<span class="input-group-addon"><i class="fa fa-arrow-right"></i></span>

0 commit comments

Comments
 (0)