Skip to content

Commit 30ebdf3

Browse files
committed
temp
1 parent 9f672b0 commit 30ebdf3

File tree

2 files changed

+61
-34
lines changed

2 files changed

+61
-34
lines changed

src/GraphQl/Type/FieldsBuilder.php

Lines changed: 60 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -497,58 +497,85 @@ private function getResourceFieldConfiguration(?string $property, ?string $field
497497
*/
498498
private function getParameterArgs(Operation $operation, array $args = []): array
499499
{
500+
$groups = [];
501+
500502
foreach ($operation->getParameters() ?? [] as $parameter) {
501503
$key = $parameter->getKey();
502504

503-
if (!str_contains($key, ':property')) {
504-
$args[$key] = ['type' => GraphQLType::string()];
505-
506-
if ($parameter->getRequired()) {
507-
$args[$key]['type'] = GraphQLType::nonNull($args[$key]['type']);
505+
if (str_contains($key, ':property')) {
506+
if (!($filterId = $parameter->getFilter()) || !$this->filterLocator->has($filterId)) {
507+
continue;
508508
}
509509

510-
continue;
511-
}
510+
$filter = $this->filterLocator->get($filterId);
511+
$parsedKey = explode('[:property]', $key);
512+
$flattenFields = [];
512513

513-
if (!($filterId = $parameter->getFilter()) || !$this->filterLocator->has($filterId)) {
514-
continue;
515-
}
516-
517-
$filter = $this->filterLocator->get($filterId);
518-
$parsedKey = explode('[:property]', $key);
519-
$flattenFields = [];
514+
if ($filter instanceof FilterInterface) {
515+
foreach ($filter->getDescription($operation->getClass()) as $name => $value) {
516+
$values = [];
517+
parse_str($name, $values);
518+
if (isset($values[$parsedKey[0]])) {
519+
$values = $values[$parsedKey[0]];
520+
}
520521

521-
if ($filter instanceof FilterInterface) {
522-
foreach ($filter->getDescription($operation->getClass()) as $name => $value) {
523-
$values = [];
524-
parse_str($name, $values);
525-
if (isset($values[$parsedKey[0]])) {
526-
$values = $values[$parsedKey[0]];
522+
$name = key($values);
523+
$flattenFields[] = ['name' => $name, 'required' => $value['required'] ?? null, 'description' => $value['description'] ?? null, 'leafs' => $values[$name], 'type' => $value['type'] ?? 'string'];
527524
}
528525

529-
$name = key($values);
530-
$flattenFields[] = ['name' => $name, 'required' => $value['required'] ?? null, 'description' => $value['description'] ?? null, 'leafs' => $values[$name], 'type' => $value['type'] ?? 'string'];
526+
$args[$parsedKey[0]] = $this->parameterToObjectType($flattenFields, $parsedKey[0]);
531527
}
532528

533-
$args[$parsedKey[0]] = $this->parameterToObjectType($flattenFields, $parsedKey[0]);
534-
}
529+
if ($filter instanceof OpenApiParameterFilterInterface) {
530+
foreach ($filter->getOpenApiParameters($parameter) as $value) {
531+
$values = [];
532+
parse_str($value->getName(), $values);
533+
if (isset($values[$parsedKey[0]])) {
534+
$values = $values[$parsedKey[0]];
535+
}
535536

536-
if ($filter instanceof OpenApiParameterFilterInterface) {
537-
foreach ($filter->getOpenApiParameters($parameter) as $value) {
538-
$values = [];
539-
parse_str($value->getName(), $values);
540-
if (isset($values[$parsedKey[0]])) {
541-
$values = $values[$parsedKey[0]];
537+
$name = key($values);
538+
$flattenFields[] = ['name' => $name, 'required' => $value->getRequired(), 'description' => $value->getDescription(), 'leafs' => $values[$name], 'type' => $value->getSchema()['type'] ?? 'string'];
542539
}
543540

544-
$name = key($values);
545-
$flattenFields[] = ['name' => $name, 'required' => $value->getRequired(), 'description' => $value->getDescription(), 'leafs' => $values[$name], 'type' => $value->getSchema()['type'] ?? 'string'];
541+
$args[$parsedKey[0]] = $this->parameterToObjectType($flattenFields, $parsedKey[0].$operation->getShortName().$operation->getName());
546542
}
547543

548-
$args[$parsedKey[0]] = $this->parameterToObjectType($flattenFields, $parsedKey[0].$operation->getShortName().$operation->getName());
544+
continue;
545+
}
546+
547+
if (str_contains($key, '[')) {
548+
$key = str_replace('.', $this->nestingSeparator, $key);
549+
parse_str($key, $values);
550+
$rootKey = key($values);
551+
552+
$leafs = $values[$rootKey];
553+
$name = key($leafs);
554+
555+
$groups[$rootKey][] = [
556+
'name' => $name,
557+
'leafs' => $leafs[$name],
558+
'required' => $parameter->getRequired(),
559+
'description' => $parameter->getDescription(),
560+
'type' => 'string',
561+
];
562+
continue;
563+
}
564+
565+
$args[$key] = ['type' => GraphQLType::string()];
566+
567+
if ($parameter->getRequired()) {
568+
$args[$key]['type'] = GraphQLType::nonNull($args[$key]['type']);
549569
}
550570
}
551571

572+
foreach ($groups as $key => $flattenFields) {
573+
$name = $key.$operation->getShortName().$operation->getName();
574+
$inputObject = $this->parameterToObjectType($flattenFields, $name);
575+
$this->typesContainer->set($name, $inputObject);
576+
$args[$key] = $inputObject;
577+
}
578+
552579
return $args;
553580
}
554581

@@ -743,4 +770,3 @@ private function normalizePropertyName(string $property, string $resourceClass):
743770
return $this->nameConverter->normalize($property, $resourceClass);
744771
}
745772
}
746-

src/Laravel/workbench/app/Models/Slot.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
new Patch(),
3737
new Delete(),
3838
],
39+
graphQlOperations: []
3940
)]
4041
class Slot extends Model
4142
{

0 commit comments

Comments
 (0)