datagrid
datagrid copied to clipboard
Filter with default filter
Hi, I found an issue in filters. If I have date filter on column and it has default filter value. The problem appears if I clear filter input manually to empty string "". Datagrid does not set default filter in this case and also hides the reset button. So I am not able to reset grid to default filter. Here is the code. I am using it with Nextras ORM.
$grid->addColumnDateTime('closed', "$cDomain.date")
->setRenderer( function ( $item ) use ( $cDomain ) {
/** @var Task $item */
$title = $this->translator->translate("$cDomain.$item->state");
return '<span title="' . $title . '">' . $item->closed->format( 'j. n. Y' ) . '</span>';
})
->setTemplateEscaping( FALSE )
->setSortable()
->setFilterDate()
->setCondition( function ($fluent, $value) {
Debugger::log($value);
/** @var \Nextras\Orm\Mapper\Dbal\DbalCollection $fluent */
$start = DateTime::createFromFormat( 'j. n. Y', $value)->setTime( 0, 0, 0 );
$end = DateTime::createFromFormat( 'j. n. Y', $value)->setTime( 23, 59, 59 );
$fluent->getQueryBuilder()
->from('tasks', 'tasks')
->andWhere( 'tasks.closed > %dt', $start )
->andWhere( 'tasks.closed < %dt', $end );
});
$defaultDate = (new DateTime())->modify('- 14 Day');
$grid->setDefaultFilter(['closed' => $defaultDate->format( 'j. n. Y' )]);
It is not fatal but it has to be fixed via session.
Text and Select filters does that too. Default value shows the Reset button, empty value hides it.
Fixed by adding logic to ::isFilterActive + testTruthy:
if (isset($this->defaultFilter[$key]) && $this->defaultFilter[$key] == $value)
{
continue;
}
if (isset($this->defaultFilter[$key]) && $this->defaultFilter[$key] != $value)
{
return true;
}