Skip to content

Commit

Permalink
fix(jsonapi): support both page & page[number]
Browse files Browse the repository at this point in the history
  • Loading branch information
Sébastien COURJEAN committed Apr 16, 2024
1 parent c2ddc80 commit 69739f0
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 5 deletions.
5 changes: 3 additions & 2 deletions src/JsonApi/State/JsonApiProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -60,14 +60,15 @@ public function provide(Operation $operation, array $uriVariables = [], array $c
$filterParameter
&& \is_array($filterParameter)
) {
$filters = array_merge(['page' => $filterParameter], $filterParameter, $filters);
$filters = array_merge($filterParameter, $filters);
}

$pageParameter = $queryParameters['page'] ?? null;
if (
\is_array($pageParameter)
) {
$filters = array_merge($pageParameter, $filters);
// To not break existing integration, put page array in _page
$filters = array_merge(['_page' => $pageParameter], $pageParameter, $filters);
}

[$included, $properties] = $this->transformFieldsetsParameters($queryParameters, $operation->getShortName() ?? '');
Expand Down
16 changes: 13 additions & 3 deletions src/State/Pagination/Pagination.php
Original file line number Diff line number Diff line change
Expand Up @@ -219,11 +219,21 @@ private function getGraphQlEnabled(?Operation $operation): bool
return $operation?->getPaginationEnabled() ?? $enabled;
}

/**
* Extract pagination parameter
* page[page] => $contextFilters['page'] with default configuration page_parameter_name: page
* page[number] => $contextFilters['_page'][number] with configuration page_parameter_name: page[number]
*/
private function extractParameter(array $contextFilters, string $parameterName)
{
\preg_match_all("/[\w-]+/", $parameterName, $matches);

foreach($matches[0] as $key){
preg_match_all("/[\w-]+/", $parameterName, $matches);
foreach ($matches[0] as $i => $key) {
if ($i === 0 && $key === 'page' && count($matches[0]) > 1) {
$key = '_page';
}
if (\is_array($contextFilters) === false) {
return $contextFilters;
}
if (!\array_key_exists($key, $contextFilters)) {
return null;
}
Expand Down

0 comments on commit 69739f0

Please sign in to comment.