datagrid icon indicating copy to clipboard operation
datagrid copied to clipboard

Filter with default filter

Open camohub opened this issue 7 years ago • 2 comments

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.

camohub avatar Jun 22 '18 08:06 camohub

Text and Select filters does that too. Default value shows the Reset button, empty value hides it.

krasa avatar Jun 17 '25 17:06 krasa

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;
        }

krasa avatar Jun 17 '25 17:06 krasa