From 0473dbc9c52ce553fdc70fca54bb1a4c8f87ea83 Mon Sep 17 00:00:00 2001 From: Tofandel Date: Thu, 11 Jul 2024 17:21:46 +0200 Subject: [PATCH] Deduplicate cmsSearchLogic --- src/Repositories/ModuleRepository.php | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/src/Repositories/ModuleRepository.php b/src/Repositories/ModuleRepository.php index 5ade539a3..5c8a1b375 100644 --- a/src/Repositories/ModuleRepository.php +++ b/src/Repositories/ModuleRepository.php @@ -15,6 +15,7 @@ use A17\Twill\Repositories\Behaviors\HandlePermissions; use A17\Twill\Repositories\Behaviors\HandleRelatedBrowsers; use A17\Twill\Repositories\Behaviors\HandleRepeaters; +use A17\Twill\Services\Listings\Filters\FreeTextSearch; use Exception; use Illuminate\Contracts\Pagination\LengthAwarePaginator; use Illuminate\Database\Eloquent\Builder; @@ -152,19 +153,16 @@ public function listAll( return $query->get()->pluck($column, $pluckBy); } - public function cmsSearch(string $search, array $fields = []): Collection + public function cmsSearch(string $search, array $fields = [], callable $query = null): Collection { - $builder = $this->model->latest(); + $searchFilter = new FreeTextSearch(); + $searchFilter->queryString($search); + $searchFilter->searchColumns($fields); + $searchFilter->searchQuery($query); - $translatedAttributes = $this->model->getTranslatedAttributes() ?? []; + $builder = $this->model->latest(); - foreach ($fields as $field) { - if (in_array($field, $translatedAttributes, true)) { - $builder->orWhereTranslationLike($field, "%$search%"); - } else { - $builder->orWhere($field, getLikeOperator(), "%$search%"); - } - } + $searchFilter->applyFilter($builder); return $builder->get(); }