Skip to content

Commit ee2a91e

Browse files
committed
wip: use pagination
1 parent cc54293 commit ee2a91e

File tree

5 files changed

+44
-5
lines changed

5 files changed

+44
-5
lines changed

composer.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
"php": "^8.3",
2020
"illuminate/contracts": "^11.0|^12.0",
2121
"saloonphp/laravel-plugin": "^3.0",
22+
"saloonphp/pagination-plugin": "^2.0",
2223
"spatie/laravel-package-tools": "^1.16"
2324
},
2425
"require-dev": {

src/FloatClient.php

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,17 @@
44

55
use Saloon\Http\Auth\TokenAuthenticator;
66
use Saloon\Http\Connector;
7+
use Saloon\Http\Request;
8+
use Saloon\Http\Response;
9+
use Saloon\PaginationPlugin\Contracts\HasPagination;
10+
use Saloon\PaginationPlugin\Paginator;
711
use Spatie\FloatSdk\Groups\AllocationsGroup;
812
use Spatie\FloatSdk\Groups\ClientsGroup;
913
use Spatie\FloatSdk\Groups\ProjectsGroup;
1014
use Spatie\FloatSdk\Groups\TasksGroup;
1115
use Spatie\FloatSdk\Groups\UsersGroup;
1216

13-
class FloatClient extends Connector
17+
class FloatClient extends Connector implements HasPagination
1418
{
1519
public function __construct(
1620
private string $apiKey,
@@ -36,6 +40,33 @@ protected function defaultAuth(): TokenAuthenticator
3640
return new TokenAuthenticator($this->apiKey);
3741
}
3842

43+
public function paginate(Request $request): Paginator
44+
{
45+
return new class(connector: $this, request: $request) extends Paginator
46+
{
47+
protected function isLastPage(Response $response): bool
48+
{
49+
return is_null($response->json('next_page_url'));
50+
}
51+
52+
protected function getPageItems(Response $response, Request $request): array
53+
{
54+
return $response->json('items');
55+
}
56+
57+
protected function applyPagination(Request $request): Request
58+
{
59+
$request->query()->add('page', $this->currentPage);
60+
61+
if (isset($this->perPageLimit)) {
62+
$request->query()->add('per-page', $this->perPageLimit);
63+
}
64+
65+
return $request;
66+
}
67+
};
68+
}
69+
3970
public function users(): UsersGroup
4071
{
4172
return new UsersGroup($this);

src/Groups/ProjectsGroup.php

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Spatie\FloatSdk\Groups;
44

5+
use Generator;
56
use Saloon\Http\BaseResource;
67
use Saloon\Http\Response;
78
use Spatie\FloatSdk\QueryParameters\GetProjectsParams;
@@ -15,8 +16,12 @@ public function get(int $projectId): Response
1516
return $this->connector->send(new GetProject($projectId));
1617
}
1718

18-
public function all(?GetProjectsParams $parameters = null): Response
19+
public function all(?GetProjectsParams $parameters = null): Generator
1920
{
20-
return $this->connector->send(new GetProjects($parameters));
21+
$paginator = $this->connector->paginate(new GetProjects($parameters));
22+
23+
foreach ($paginator->paginate() as $response) {
24+
yield $response;
25+
}
2126
}
2227
}

src/Requests/GetAllocations.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,11 @@
55
use Saloon\Enums\Method;
66
use Saloon\Http\Request;
77
use Saloon\Http\Response;
8+
use Saloon\PaginationPlugin\Contracts\Paginatable;
89
use Spatie\FloatSdk\QueryParameters\GetAllocationsParams;
910
use Spatie\FloatSdk\Resources\TaskResource;
1011

11-
class GetAllocations extends Request
12+
class GetAllocations extends Request implements Paginatable
1213
{
1314
protected Method $method = Method::GET;
1415

src/Requests/GetProjects.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,11 @@
55
use Saloon\Enums\Method;
66
use Saloon\Http\Request;
77
use Saloon\Http\Response;
8+
use Saloon\PaginationPlugin\Contracts\Paginatable;
89
use Spatie\FloatSdk\QueryParameters\GetProjectsParams;
910
use Spatie\FloatSdk\Resources\ProjectResource;
1011

11-
class GetProjects extends Request
12+
class GetProjects extends Request implements Paginatable
1213
{
1314
protected Method $method = Method::GET;
1415

0 commit comments

Comments
 (0)