feat(graphql): add support for sorting on search (#1190)

This commit is contained in:
Kyrch
2026-04-23 22:43:53 -03:00
committed by GitHub
parent 74d3ee200a
commit 71c4f56a9d
+24 -1
View File
@@ -6,15 +6,19 @@ namespace App\GraphQL\Directives;
use App\Contracts\GraphQL\EnumSort;
use App\Enums\Http\Api\Field\AggregateFunction;
use App\GraphQL\Sort\FieldSortCriteria;
use GraphQL\Error\Error;
use Illuminate\Database\Eloquent\Builder as EloquentBuilder;
use Illuminate\Database\Eloquent\Relations\Relation;
use Illuminate\Database\Query\Builder as QueryBuilder;
use Laravel\Scout\Builder as ScoutBuilder;
use Nuwave\Lighthouse\Schema\Directives\BaseDirective;
use Nuwave\Lighthouse\Scout\ScoutBuilderDirective;
use Nuwave\Lighthouse\Support\Contracts\ArgBuilderDirective;
use Nuwave\Lighthouse\Support\Contracts\ArgDirective;
use UnitEnum;
class SortDirective extends BaseDirective implements ArgBuilderDirective, ArgDirective
class SortDirective extends BaseDirective implements ArgBuilderDirective, ArgDirective, ScoutBuilderDirective
{
public static function definition(): string
{
@@ -48,4 +52,23 @@ GRAPHQL;
return $builder;
}
/**
* Modify the scout builder with a client given value.
*
* @param array<int, UnitEnum&EnumSort> $value the client given value of the argument
*/
public function handleScoutBuilder(ScoutBuilder $builder, mixed $value): ScoutBuilder
{
foreach ($value as $sort) {
$criteria = $sort->getSortCriteria();
match (true) {
$criteria instanceof FieldSortCriteria => $builder->orderBy($criteria->getColumn(), $criteria->getDirection()->value),
default => throw new Error('Sorting by this value is not supported when using the \'search\' parameter.'),
};
}
return $builder;
}
}