Skip to content

Commit

Permalink
Added support for SimpleFilter
Browse files Browse the repository at this point in the history
  • Loading branch information
mesour committed Jan 15, 2017
1 parent c2a9a21 commit aa39b33
Show file tree
Hide file tree
Showing 6 changed files with 165 additions and 4 deletions.
9 changes: 8 additions & 1 deletion examples/editable.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,12 @@

<link rel="stylesheet" href="../node_modules/mesour-datagrid/dist/css/mesour.datagrid.min.css">

<style>
.input-group-btn:last-child > .btn[data-simple-filter] {
padding: 9px;
}
</style>

<hr>

<div class="row col-lg-12" style="padding-left: 50px;">
Expand Down Expand Up @@ -98,7 +104,8 @@

$pager = $grid->enablePager(8);

$filter = $grid->enableFilter(false);
//$filter = $grid->enableFilter();
$filter = $grid->enableSimpleFilter();

$selection = $grid->enableRowSelection();

Expand Down
10 changes: 8 additions & 2 deletions examples/sources/nette_source.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,17 @@
$selection,
$context,
[
'group_name' => 'g.name',
'group' => 'g.name',
'group_name' => 'groups.name',
'group' => 'groups.name',
'wallet' => 'wallet.amount',
'companies' => ':user_companies.company.name',
'addresses' => ':user_addresses.city',
'id' => 'users.id',
'amount' => 'users.amount',
'name' => 'users.name',
'wallet_amount' => 'wallet.amount',
'company_name' => ':user_companies.company.name',
'address_city' => ':addresses.city',
]
);

Expand Down
17 changes: 16 additions & 1 deletion src/Mesour/DataGrid/ExtendedGrid.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
* @author Matouš Němec <[email protected]>
*
* @method null onSort($data, $itemId)
* @method null onFilter(Extensions\Filter\IFilter $filter)
* @method null onFilter(Extensions\Filter\IFilter|Extensions\SimpleFilter\ISimpleFilter $filter)
*/
abstract class ExtendedGrid extends BaseGrid
{
Expand Down Expand Up @@ -97,9 +97,24 @@ public function enableExport($cacheDir, $fileName = null)
*/
public function enableFilter($inline = true)
{
if ($this->getExtension('ISimpleFilter', false)) {
throw new Mesour\InvalidStateException('Simple filter is already used.');
}
return $this->getExtension('IFilter')->setInline($inline);
}

/**
* @param array $allowedColumns
* @return Extensions\SimpleFilter\ISimpleFilter
*/
public function enableSimpleFilter(array $allowedColumns = [])
{
if ($this->getExtension('IFilter', false)) {
throw new Mesour\InvalidStateException('Normal filter is already used.');
}
return $this->getExtension('ISimpleFilter')->setAllowedColumns($allowedColumns);
}

/**
* @return Extensions\Selection\ISelection
* @throws Mesour\InvalidArgumentException
Expand Down
5 changes: 5 additions & 0 deletions src/Mesour/DataGrid/ExtensionStorage.php
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,11 @@ class ExtensionStorage
'interface' => Mesour\DataGrid\Extensions\Filter\IFilter::class,
'class' => Mesour\DataGrid\Extensions\Filter\FilterExtension::class,
],
'ISimpleFilter' => [
'name' => 'filter',
'interface' => Mesour\DataGrid\Extensions\SimpleFilter\ISimpleFilter::class,
'class' => Mesour\DataGrid\Extensions\SimpleFilter\SimpleFilterExtension::class,
],
'ISortable' => [
'name' => 'sortable',
'interface' => Mesour\DataGrid\Extensions\Sortable\ISortable::class,
Expand Down
22 changes: 22 additions & 0 deletions src/Mesour/DataGrid/Extensions/SimpleFilter/ISimpleFilter.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<?php
/**
* This file is part of the Mesour DataGrid (http://grid.mesour.com)
*
* Copyright (c) 2015-2016 Matouš Němec (http://mesour.com)
*
* For full licence and copyright please view the file licence.md in root of this project
*/

namespace Mesour\DataGrid\Extensions\SimpleFilter;

use Mesour;

/**
* @author Matouš Němec <[email protected]>
*/
interface ISimpleFilter extends Mesour\Filter\ISimpleFilter, Mesour\DataGrid\Extensions\IExtension
{

public function beforeCreate();

}
106 changes: 106 additions & 0 deletions src/Mesour/DataGrid/Extensions/SimpleFilter/SimpleFilterExtension.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
<?php
/**
* This file is part of the Mesour DataGrid (http://grid.mesour.com)
*
* Copyright (c) 2015-2016 Matouš Němec (http://mesour.com)
*
* For full licence and copyright please view the file licence.md in root of this project
*/

namespace Mesour\DataGrid\Extensions\SimpleFilter;

use Mesour;

/**
* @author Matouš Němec <[email protected]>
*/
class SimpleFilterExtension extends Mesour\UI\SimpleFilter implements ISimpleFilter
{

use Mesour\Components\Security\Authorised;

private $disabled = false;

/** @var Mesour\Components\Utils\Html|string */
private $createdFilter;

/**
* @return bool
*/
public function isDisabled()
{
return $this->disabled;
}

public function setDisabled($disabled = true)
{
$this->disabled = (bool) $disabled;
return $this;
}

public function gridCreate($data = [])
{
$this->onFilter[] = function (ISimpleFilter $currentFilter) {
$this->updateFilter($currentFilter);
$this->getGrid()->onFilter($currentFilter);
};
$this->setSource($this->getGrid()->getSource());

$this->setOption('data', $data);
$this->createdFilter = $this->create();
$this->updateFilter($this);
}

/**
* @return Mesour\DataGrid\ExtendedGrid|Mesour\Components\Control\IControl
*/
public function getGrid()
{
return $this->getParent();
}

public function createInstance(Mesour\DataGrid\Extensions\IExtension $extension, $name = null)
{

}

public function afterGetCount($count)
{

}

public function beforeFetchData($data = [])
{

}

public function afterFetchData($currentData, $data = [], $rawData = [])
{

}

public function attachToRenderer(Mesour\DataGrid\Renderer\IGridRenderer $renderer, $data = [], $rawData = [])
{
$filterPrototype = $this->getGrid()->getFilterPrototype();
$filterPrototype->add($this->createdFilter);
$renderer->setComponent('filter', $filterPrototype);
}

public function reset($hard = false)
{

}

/**
* @param ISimpleFilter $filter
* @throws
*/
private function updateFilter(ISimpleFilter $filter)
{
if (!$this->isDisabled()) {
$source = $this->getGrid()->getSource();
$source->applySimple($filter->getQuery(), $filter->getAllowedColumns());
}
}

}

0 comments on commit aa39b33

Please sign in to comment.