Фокус в том, что пресет задаётся до вызова этих компонентов, и выбранный "по умолчанию" должен примениться к выборке main.ui.grid.
Что бы это реализовать в компоненте в месте где получаем и проверяем значения фильтра делаем так:
$arResult['GRID']['FILTER_ID'] = (str)$arParams['FILTER_ID]; $arResult['GRID']['FILTER_FIELDS'] = $arParams['FILTER_FIELDS] // массив полей фильтра $arResult['GRID']['FILTER_OBJ'] = new Bitrix\Main\UI\Filter\Options($arResult['GRID']['FILTER_ID'], $arParams['FILTER_PRESETS']); // либо запилить пресет прямо в компонент. $filterData = $arResult['GRID']['FILTER_OBJ']->getFilter($arResult['GRID']['FILTER_FIELDS']); // получили массив для фильтрации Фильтруем! :) |
Комментируйте, буду рад!
вместо
if (empty($v)) continue;
\Bitrix\Main\UI\Filter\Type::getLogicFilter($filterFields, $sourceFields);
где $sourceFields - массив описания полей фильтра:
$sourceFields = [
['id' => 'ID', 'name' => 'ID', 'type' => 'number', 'default' => true],
['id' => 'DATE_UPDATE', 'name' => 'Дата обновления', 'type' => 'date', 'default' => true]
];