Merge pull request #7690 from GSadee/grid-enabled-x

[Grid] Add methods for getting only enabled fields, actions and filters
This commit is contained in:
Paweł Jędrzejewski 2017-03-07 17:50:26 +01:00 committed by GitHub
commit 5f93535fbc
6 changed files with 120 additions and 19 deletions

View file

@ -1,7 +1,7 @@
<div class="middle aligned column">
<div class="ui right floated buttons">
{% if definition.actionGroups.main is defined and definition.getActions('main')|length > 0 %}
{% for action in definition.getActions('main') if action.enabled %}
{% if definition.actionGroups.main is defined %}
{% for action in definition.getEnabledActions('main') %}
{{ sylius_grid_render_action(resources, action, null) }}
{% endfor %}
{% endif %}

View file

@ -2,7 +2,7 @@
<form method="get" action="{{ path('sylius_shop_product_index', {'slug': app.request.attributes.get('slug')}) }}" class="ui loadable form">
<div class="ui stackable grid">
<div class="eleven wide column">
{% for filter in products.definition.filters %}
{% for filter in products.definition.enabledFilters %}
{{ sylius_grid_render_filter(products, filter) }}
{% endfor %}
</div>

View file

@ -8,7 +8,7 @@
{% set path = path(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')) %}
{% if definition.filters|length > 0 %}
{% if definition.enabledFilters|length > 0 %}
<div class="ui hidden divider"></div>
<div class="ui styled fluid accordion">
<div class="title active">
@ -18,7 +18,7 @@
<div class="content active">
<form method="get" action="{{ path }}" class="ui loadable form">
<div class="two fields">
{% for filter in definition.filters|sort_by('position') if filter.enabled %}
{% for filter in definition.enabledFilters|sort_by('position') if filter.enabled %}
{{ sylius_grid_render_filter(grid, filter) }}
{% if loop.index0 % 2 %}

View file

@ -17,27 +17,21 @@
{% macro row(grid, definition, row) %}
<tr class="item">
{% for field in definition.fields|sort_by('position') %}
{% if field.enabled %}
<td>{{ sylius_grid_render_field(grid, field, row) }}</td>
{% endif %}
{% for field in definition.enabledFields|sort_by('position') %}
<td>{{ sylius_grid_render_field(grid, field, row) }}</td>
{% endfor %}
{% if definition.actionGroups.item is defined and definition.getActions('item')|length > 0 %}
{% if definition.actionGroups.item is defined and definition.getEnabledActions('item')|length > 0 %}
<td>
<div class="ui buttons">
{% for action in definition.getActions('item')|sort_by('position') %}
{% if action.enabled %}
{{ sylius_grid_render_action(grid, action, row) }}
{% endif %}
{% for action in definition.getEnabledActions('item')|sort_by('position') %}
{{ sylius_grid_render_action(grid, action, row) }}
{% endfor %}
</div>
{% if definition.actionGroups.subitem is defined and definition.getActions('subitem')|length > 0 %}
{% if definition.actionGroups.subitem is defined and definition.getEnabledActions('subitem')|length > 0 %}
<div class="ui divider"></div>
<div class="ui buttons">
{% for action in definition.getActions('subitem')|sort_by('position') %}
{% if action.enabled %}
{{ sylius_grid_render_action(grid, action, row) }}
{% endif %}
{% for action in definition.getEnabledActions('subitem')|sort_by('position') %}
{{ sylius_grid_render_action(grid, action, row) }}
{% endfor %}
</div>
{% endif %}

View file

@ -151,6 +151,14 @@ class Grid
return $this->fields;
}
/**
* @return array
*/
public function getEnabledFields()
{
return $this->getEnabledItems($this->getFields());
}
/**
* @param Field $field
*/
@ -217,6 +225,14 @@ class Grid
return $this->actionGroups;
}
/**
* @return array
*/
public function getEnabledActionGroups()
{
return $this->getEnabledItems($this->getActionGroups());
}
/**
* @param ActionGroup $actionGroup
*/
@ -275,6 +291,14 @@ class Grid
return $this->getActionGroup($groupName)->getActions();
}
/**
* @return array
*/
public function getEnabledActions($groupName)
{
return $this->getEnabledItems($this->getActions($groupName));
}
/**
* @param string $name
*
@ -293,6 +317,14 @@ class Grid
return $this->filters;
}
/**
* @return array
*/
public function getEnabledFilters()
{
return $this->getEnabledItems($this->getFilters());
}
/**
* @param Filter $filter
*/
@ -348,4 +380,21 @@ class Grid
{
return array_key_exists($name, $this->filters);
}
/**
* @param array $items
*
* @return array
*/
private function getEnabledItems(array $items)
{
$filteredItems = [];
foreach ($items as $item) {
if ($item->isEnabled()) {
$filteredItems[] = $item;
}
}
return $filteredItems;
}
}

View file

@ -138,6 +138,28 @@ final class GridSpec extends ObjectBehavior
$this->getField('enabled')->shouldReturn($secondField);
}
function it_can_return_fields(Field $firstField, Field $secondField)
{
$firstField->getName()->willReturn('first');
$secondField->getName()->willReturn('second');
$this->addField($firstField);
$this->addField($secondField);
$this->getFields()->shouldHaveCount(2);
}
function it_can_return_only_enabled_fields(Field $firstField, Field $secondField)
{
$firstField->getName()->willReturn('first');
$firstField->isEnabled()->willReturn(true);
$secondField->getName()->willReturn('second');
$secondField->isEnabled()->willReturn(false);
$this->addField($firstField);
$this->addField($secondField);
$this->getEnabledFields()->shouldHaveCount(1);
}
function it_does_not_have_any_action_groups_by_default()
{
$this->getActionGroups()->shouldReturn([]);
@ -201,6 +223,20 @@ final class GridSpec extends ObjectBehavior
$this->getActions('row')->shouldReturn([$action]);
}
function it_returns_only_enabled_actions_for_given_group(
ActionGroup $actionGroup,
Action $firstAction,
Action $secondAction
) {
$firstAction->isEnabled()->willReturn(true);
$secondAction->isEnabled()->willReturn(false);
$actionGroup->getName()->willReturn('row');
$actionGroup->getActions()->willReturn([$firstAction, $secondAction]);
$this->addActionGroup($actionGroup);
$this->getEnabledActions('row')->shouldReturn([$firstAction]);
}
function it_does_not_have_any_filters_by_default()
{
$this->getFilters()->shouldReturn([]);
@ -254,4 +290,26 @@ final class GridSpec extends ObjectBehavior
$this->setFilter($secondFilter);
$this->getFilter('enabled')->shouldReturn($secondFilter);
}
function it_can_return_filters(Filter $firstFilter, Filter $secondFilter)
{
$firstFilter->getName()->willReturn('first');
$secondFilter->getName()->willReturn('second');
$this->addFilter($firstFilter);
$this->addFilter($secondFilter);
$this->getFilters()->shouldHaveCount(2);
}
function it_can_return_only_enabled_filters(Filter $firstFilter, Filter $secondFilter)
{
$firstFilter->getName()->willReturn('first');
$firstFilter->isEnabled()->willReturn(true);
$secondFilter->getName()->willReturn('second');
$secondFilter->isEnabled()->willReturn(false);
$this->addFilter($firstFilter);
$this->addFilter($secondFilter);
$this->getEnabledFilters()->shouldHaveCount(1);
}
}