Skip to content

Commit cf0c1e8

Browse files
committed
Move cursor resolution into CursorPaginator
1 parent 92aceec commit cf0c1e8

3 files changed

Lines changed: 20 additions & 20 deletions

File tree

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
},
2929
"require": {
3030
"php": "^8.2",
31-
"directorytree/opensearch-adapter": "^1.0.3",
31+
"directorytree/opensearch-adapter": "^1.0.4",
3232
"directorytree/opensearch-client": "^1.0",
3333
"laravel/scout": "^10.0|^11.0|^12.0|^13.0"
3434
},

src/CursorPaginator.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use Illuminate\Database\Eloquent\Model;
66
use Illuminate\Http\Resources\Json\JsonResource;
7+
use Illuminate\Pagination\Cursor;
78
use Illuminate\Pagination\CursorPaginator as BaseCursorPaginator;
89
use UnexpectedValueException;
910

@@ -19,6 +20,22 @@ class CursorPaginator extends BaseCursorPaginator
1920
*/
2021
protected array $searchAfter = [];
2122

23+
/**
24+
* Resolve the cursor from the current request or explicit value.
25+
*/
26+
public static function resolveCursor(Cursor|string|null $cursor, string $cursorName = 'cursor'): ?Cursor
27+
{
28+
if ($cursor instanceof Cursor) {
29+
return $cursor;
30+
}
31+
32+
if (is_string($cursor)) {
33+
return Cursor::fromEncoded($cursor);
34+
}
35+
36+
return BaseCursorPaginator::resolveCurrentCursor($cursorName);
37+
}
38+
2239
/**
2340
* Get the cursor parameters for a given item.
2441
*/

src/Engine.php

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
use Illuminate\Database\Eloquent\Collection as EloquentCollection;
1414
use Illuminate\Database\Eloquent\Model;
1515
use Illuminate\Pagination\Cursor;
16-
use Illuminate\Pagination\CursorPaginator as IlluminateCursorPaginator;
1716
use Illuminate\Pagination\Paginator;
1817
use Illuminate\Support\Collection as BaseCollection;
1918
use Illuminate\Support\LazyCollection;
@@ -101,15 +100,15 @@ public function cursorPaginate(Builder $builder, $perPage = null, string $cursor
101100
{
102101
$perPage = (int) ($perPage ?: $builder->model->getPerPage());
103102

104-
$cursor = $this->resolveCursor($cursor, $cursorName);
103+
$cursor = CursorPaginator::resolveCursor($cursor, $cursorName);
105104

106105
$searchRequest = $this->searchRequestFactory->makeFromBuilder($builder, [
107106
'perPage' => $perPage + 1,
108107
'reversed' => $cursor?->pointsToPreviousItems() ?? false,
109108
'searchAfter' => $cursor?->parameter(CursorPaginator::SEARCH_AFTER_PARAMETER),
110109
]);
111110

112-
if (empty($searchRequest->request()->toArray()['body']['sort'] ?? [])) {
111+
if (! $searchRequest->request()->hasSort()) {
113112
throw new InvalidArgumentException('OpenSearch cursor pagination requires at least one explicit sort.');
114113
}
115114

@@ -160,22 +159,6 @@ public function getTotalCount($results): ?int
160159
return $results->total();
161160
}
162161

163-
/**
164-
* Resolve the cursor from the current request or explicit value.
165-
*/
166-
protected function resolveCursor(Cursor|string|null $cursor, string $cursorName): ?Cursor
167-
{
168-
if ($cursor instanceof Cursor) {
169-
return $cursor;
170-
}
171-
172-
if (is_string($cursor)) {
173-
return Cursor::fromEncoded($cursor);
174-
}
175-
176-
return IlluminateCursorPaginator::resolveCurrentCursor($cursorName);
177-
}
178-
179162
/**
180163
* Get hit sort values keyed by document ID.
181164
*

0 commit comments

Comments
 (0)