From 05bcd7ae77ac8dec8d7895e7cc219ed28e8140fb Mon Sep 17 00:00:00 2001 From: Lau Bannenberg Date: Mon, 5 Jan 2026 22:07:07 +0100 Subject: [PATCH 1/2] Allow using searchable_fields to *restrict* which fields are searched by the ArrayHandler --- ProviderHandler/ArrayHandler.php | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/ProviderHandler/ArrayHandler.php b/ProviderHandler/ArrayHandler.php index 2cef549..d9cd24d 100644 --- a/ProviderHandler/ArrayHandler.php +++ b/ProviderHandler/ArrayHandler.php @@ -56,9 +56,14 @@ public function getItems(object $provider, GridState $gridState): array $search = $gridState->getSearch(); + $searchableFields = $gridState->getSearchableFields(); if (!empty($search)) { - $items = array_filter($items, function (DataObject $item) use ($search) { - foreach ($item->getData() as $itemValue) { + $items = array_filter($items, function (DataObject $item) use ($search, $searchableFields) { + foreach ($item->getData() as $fieldName => $itemValue) { + if($searchableFields && !in_array($fieldName, $searchableFields)) { + continue; + } + if (is_string($itemValue) && str_contains($itemValue, $search)) { return true; } From 3e60802224ad4c1ec35a8a8bd62519afb7370495 Mon Sep 17 00:00:00 2001 From: Lau Bannenberg Date: Mon, 5 Jan 2026 23:21:47 +0100 Subject: [PATCH 2/2] Implement filtering for array grids --- ProviderHandler/ArrayHandler.php | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/ProviderHandler/ArrayHandler.php b/ProviderHandler/ArrayHandler.php index d9cd24d..e9976ed 100644 --- a/ProviderHandler/ArrayHandler.php +++ b/ProviderHandler/ArrayHandler.php @@ -73,6 +73,33 @@ public function getItems(object $provider, GridState $gridState): array }); } + foreach($gridState->getFilters() as $filter) { + $items = match($filter->getConditionType()) { + 'like' => array_filter($items, function (DataObject $item) use ($filter) { + return str_contains((string)$item->getData($filter->getField()), (string)$filter->getValue()); + }), + 'equals' => array_filter($items, function (DataObject $item) use ($filter) { + return (string)$item->getData($filter->getField()) === (string)$filter->getValue(); + }), + 'from_to' => array_filter($items, function (DataObject $item) use ($filter) { + $fieldValue = $item->getData($filter->getField()); + + $from = $filter->getValue()['from'] ?? ''; + if ($from !== '' && $fieldValue < $from) { + return false; + } + + $to = $filter->getValue()['to'] ?? ''; + if ($to !== '' && $fieldValue > $to) { + return false; + } + + return true; + }), + default => $items + }; + } + $sortField = $gridState->getSortBy(); $sortDirection = $gridState->getSortDirection(); if (!empty($sortField)) {