@@ -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-
0 commit comments