[6.x] Add default values for filters#2054
Conversation
|
@luanfreitasdev Here is my PR for the functionality to add default values to filters.. I hope I did not miss anything.. when testing everything worked fine for me. Probably it would be good to also add this to the documentation. Also probably need to write/rewrite some test cases.. I am looking into that. |
Readded a chunk of code I removed.. for god know why
|
Ok I found the issue with the failing test cases and fixed it |
| collect($this->filters()) | ||
| ->each(function ($filter) use (&$defaultFiltersApplied) { | ||
| // Check if filter has a default value set | ||
| if (! isset($filter->defaultValue) || is_null($filter->defaultValue)) { |
There was a problem hiding this comment.
I think is_null check is redundant here
There was a problem hiding this comment.
Yup you are correct. Fixing it.
luanfreitasdev
left a comment
There was a problem hiding this comment.
@johannesMEGABAD. Thanks you for this PR!
Can you add any test ?
|
|
||
| public bool $showFilters = false; | ||
|
|
||
| protected function applyDefaultFilters(): void |
There was a problem hiding this comment.
Suggestion:
$columnsByField = collect($this->columns)
->mapWithKeys(fn (Column $column) => [
filled($column->field) ?? filled($column->dataField) => $column,
]);
collect($this->filters())
->filter(fn ($filter) => filled($filter->defaultValue))
->each(function (FilterBase $filter) use (&$defaultFiltersApplied, $columnsByField) {
$field = $filter->field;
$column = $filter->column;
$key = $filter->key;
$defaultValue = $filter->defaultValue;
$columnData = $columnsByField->get($column);
$label = data_get($columnData, 'title', $field);
switch ($key) {
case 'select':
data_set($this->filters, "select.{$field}", $defaultValue);
$this->addEnabledFilters($field, $label);
$defaultFiltersApplied = true;
break;
case 'multi_select':
$values = is_array($defaultValue) ? $defaultValue : [$defaultValue];
data_set($this->filters, "multi_select.{$field}", $values);
$this->addEnabledFilters($field, $label);
$defaultFiltersApplied = true;
break;
case 'boolean':
data_set($this->filters, "boolean.{$field}", $defaultValue);
$this->addEnabledFilters($field, $label);
$defaultFiltersApplied = true;
break;
case 'input_text':
if (is_array($defaultValue)) {
// Support for both value and operator
data_set($this->filters, "input_text.{$field}", $defaultValue['value'] ?? '');
if (isset($defaultValue['operator'])) {
data_set($this->filters, "input_text_options.{$field}", $defaultValue['operator']);
}
} else {
data_set($this->filters, "input_text.{$field}", $defaultValue);
}
$this->addEnabledFilters($field, $label);
$defaultFiltersApplied = true;
break;
case 'number':
if (is_array($defaultValue)) {
if (isset($defaultValue['start'])) {
data_set($this->filters, "number.{$field}.start", $defaultValue['start']);
}
if (isset($defaultValue['end'])) {
data_set($this->filters, "number.{$field}.end", $defaultValue['end']);
}
} else {
data_set($this->filters, "number.{$field}.start", $defaultValue);
}
$this->addEnabledFilters($field, $label);
$defaultFiltersApplied = true;
break;
case 'date':
case 'datetime':
if (is_array($defaultValue) && isset($defaultValue['start']) && isset($defaultValue['end'])) {
$this->filters[$key][$field] = [
'start' => $defaultValue['start'],
'end' => $defaultValue['end'],
'formatted' => $defaultValue['formatted'] ?? '',
];
$this->addEnabledFilters($field, $label);
$defaultFiltersApplied = true;
}
break;
}
});
if ($defaultFiltersApplied) {
$this->persistState('filters');
}
Yup, will do. |
|
@luanfreitasdev Sorry it takes so long! Some stuff got in the way. Will do it this week. |
⚡ PowerGrid - Pull Request
Description
This pull-request adds the functionality of setting default values for filters.
Usage
Simply chain
->default()to any filter with the appropriate value for that filter type:Related Issue(s):
Documentation
This PR requires Documentation update?