From 5a0fc8a4777c64b009f04de80ce28b1bf6b8349d Mon Sep 17 00:00:00 2001 From: Korca Date: Wed, 1 Apr 2026 17:22:06 +0200 Subject: [PATCH] f-feature-switchers --- src/Component/DataGrid.latte | 34 +++++---- src/Component/DataGrid.php | 80 +++++++++++++++----- src/Component/datagrid_filter_switcher.latte | 2 +- 3 files changed, 80 insertions(+), 36 deletions(-) diff --git a/src/Component/DataGrid.latte b/src/Component/DataGrid.latte index f8941dd..932c86a 100644 --- a/src/Component/DataGrid.latte +++ b/src/Component/DataGrid.latte @@ -119,21 +119,23 @@ {$export->setClass('btn noajax')->render()} {/foreach} - {block isActive} - {ifset $filters['isActive']} - {if isset($control['filter']['filter']) && isset($control['filter']['filter'][$filters['isActive']->getKey()])} - {snippet isActive} - {var $form = $control['filter']} - - {include $filters['isActive']->getTemplate(), - filter => $filters['isActive'], - input => $form['filter'][$filters['isActive']->getKey()], - outer => TRUE - } - - {/snippet} - {/if} - {/ifset} + {block switchers} + {snippet switchers} + {var $form = $control['filter']} + {foreach $switcherValues as $switcherKey => $_} + {ifset $filters[$switcherKey]} + {if isset($control['filter']['filter']) && isset($control['filter']['filter'][$filters[$switcherKey]->getKey()])} + + {include $filters[$switcherKey]->getTemplate(), + filter => $filters[$switcherKey], + input => $form['filter'][$filters[$switcherKey]->getKey()], + outer => TRUE + } + + {/if} + {/ifset} + {/foreach} + {/snippet} {/block} @@ -151,7 +153,7 @@ {var $i = 0} {var $filter_columns_class = 'col-sm-' . (12 / $control->getOuterFilterColumnsCount())} {foreach $filters as $filterName => $f} - {continueIf in_array($filterName, ['search', 'isActive'])} + {continueIf in_array($filterName, ['search', 'isActive']) || isset($switcherValues[$filterName])} {** * Each fitler is rendered separately in its own template *} diff --git a/src/Component/DataGrid.php b/src/Component/DataGrid.php index 1fad079..775f96a 100644 --- a/src/Component/DataGrid.php +++ b/src/Component/DataGrid.php @@ -53,6 +53,7 @@ class DataGrid extends \Contributte\Datagrid\Datagrid protected string $gridName; protected string $email; private bool $isActiveValue = true; + private array $switcherValues = []; protected ?string $parentTemplate = null; public function getSessionData(?string $key = null, mixed $defaultValue = null): array @@ -128,6 +129,7 @@ public function render(): void $this->template->showTableFoot = $this->showTableFoot; $this->template->toolbarButons = $this->toolbarButtons; $this->template->isActiveValue = $this->isActiveValue; + $this->template->switcherValues = $this->switcherValues; $this->template->gridFilters = $this->gridFilterQueryFactory->create()->byGrid($this->gridName)->fetch(); $this->template->parentTemplate = $this->parentTemplate; @@ -330,34 +332,74 @@ public function addExportExcel( * @throws DataGridException */ public function addIsActiveSwitcher(): void + { + $this->addSwitcher( + 'isActive', + 'app.forms.global.isActive.label', + function (IsActiveFilter $query, $value) { + if (!$value) { + $query->disableIsActiveFilter(); + } + }, + title: 'app.forms.global.isActive.title' + ); + + $this->isActiveValue = $this->switcherValues['isActive']; + } + + /** + * @throws DataGridException + */ + public function addSwitcher(string $key, string $name, callable $callback, ?string $column = null, ?string $title = null, bool $defaultValue = true): FilterSwitcher { $postRequest = $this->getPresenter()->getRequest()->getPost('filter'); - $isActive = $this->addFilterSwitcher('isActive', 'app.forms.global.isActive.label', 'isActive') - ->setValue(true) - ->addAttribute('title', $this->translator->translate('app.forms.global.isActive.title')); + $switcher = $this->addFilterSwitcher($key, $name, $column) + ->setValue($defaultValue) + ->setCondition($callback); + + if ($title) { + $switcher->addAttribute('title', $this->translator->translate($title)); + } + + $this->switcherValues[$key] = $defaultValue; if ( - (isset($this->params['filter']['isActive']) && ( - $this->params['filter']['isActive'] === 'true' - || $this->params['filter']['isActive'] === '1') - ) || (isset($postRequest['isActive']) && $postRequest['isActive'] === '1') + ( + isset($this->params['filter'][$key]) + && + ( + $this->params['filter'][$key] === 'true' + || + $this->params['filter'][$key] === '1' + ) + ) + || + (isset($postRequest[$key]) && $postRequest[$key] === '1') ) { - $isActive + $switcher ->setValue(true) ->setDefaultValue(true) ->addAttribute('checked', 'checked'); - } - elseif ( - (isset($this->params['filter']['isActive']) && ( - $this->params['filter']['isActive'] === 'false' - || $this->params['filter']['isActive'] === '0') - ) || (isset($postRequest['isActive']) && $postRequest['isActive'] === '0') + + $this->switcherValues[$key] = true; + + } elseif ( + ( + isset($this->params['filter'][$key]) + && + ( + $this->params['filter'][$key] === 'false' + || + $this->params['filter'][$key] === '0' + ) + ) + || + (isset($postRequest[$key]) && $postRequest[$key] === '0') ) { - $isActive->setCondition(function (IsActiveFilter $query) { - $query->disableIsActiveFilter(); - }); - $this->isActiveValue = false; + $this->switcherValues[$key] = false; } + + return $switcher; } /** @@ -373,7 +415,7 @@ public function addFilterSwitcher( $this->addFilterCheck($key); - return $this->filters[$key] = new FilterSwitcher($this, $key, $name, $column); + return $this->filters[$key] = new FilterSwitcher($this, $key, $this->translator->translate($name), $column); } public function isFilterActive(?string $filter = null): bool diff --git a/src/Component/datagrid_filter_switcher.latte b/src/Component/datagrid_filter_switcher.latte index 8b52da2..fb1b8af 100644 --- a/src/Component/datagrid_filter_switcher.latte +++ b/src/Component/datagrid_filter_switcher.latte @@ -3,7 +3,7 @@ * @param Nette\Forms\Controls\TextInput $input *}
- {php $input->setValue($isActiveValue)} {* TODO *} + {php $input->setValue($switcherValues[$filter->getKey()] ?? null)}
\ No newline at end of file