44
55use Saloon \Http \Auth \TokenAuthenticator ;
66use Saloon \Http \Connector ;
7+ use Saloon \Http \Request ;
8+ use Saloon \Http \Response ;
9+ use Saloon \PaginationPlugin \Contracts \HasPagination ;
10+ use Saloon \PaginationPlugin \Paginator ;
711use Spatie \FloatSdk \Groups \AllocationsGroup ;
812use Spatie \FloatSdk \Groups \ClientsGroup ;
913use Spatie \FloatSdk \Groups \ProjectsGroup ;
1014use Spatie \FloatSdk \Groups \TasksGroup ;
1115use 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 );
0 commit comments