@@ -69,22 +69,11 @@ public function getQueryFields(FieldNode $fieldNode, ResolveInfo $resolveInfo):
69
69
$ query = $ fieldNode ->selectionSet ->selections ;
70
70
$ selectedFields = [];
71
71
$ fragmentFields = [];
72
+ $ res = $ resolveInfo ;
72
73
/** @var FieldNode $field */
73
- foreach ($ query as $ field ) {
74
- if ($ field ->kind === NodeKind::INLINE_FRAGMENT ) {
75
- $ fragmentFields [] = $ this ->addInlineFragmentFields ($ resolveInfo , $ field );
76
- } elseif ($ field ->kind === NodeKind::FRAGMENT_SPREAD &&
77
- ($ spreadFragmentNode = $ resolveInfo ->fragments [$ field ->name ->value ])) {
78
-
79
- foreach ($ spreadFragmentNode ->selectionSet ->selections as $ spreadNode ) {
80
- $ response = $ this ->setFieldNodeData ($ spreadNode , $ resolveInfo );
81
- $ fragmentFields =$ response ['fragmentFields ' ];
82
- $ selectedFields =$ response ['selectedFields ' ];
83
- }
84
- } else {
85
- $ selectedFields [] = $ field ->name ->value ;
86
- }
87
- }
74
+ $ response =$ this ->getQueryData ($ query , $ res );
75
+ $ selectedFields =$ response ['selectedFields ' ];
76
+ $ fragmentFields =$ response ['fragmentFields ' ];
88
77
if ($ fragmentFields ) {
89
78
$ selectedFields = array_merge ([], $ selectedFields , ...$ fragmentFields );
90
79
}
@@ -95,26 +84,38 @@ public function getQueryFields(FieldNode $fieldNode, ResolveInfo $resolveInfo):
95
84
}
96
85
97
86
/**
98
- * Set the field selections for a query node
87
+ * Get an array of queried data.
99
88
*
100
- * @param array $spreadNode
89
+ * @param array $query
101
90
* @param ResolveInfo $resolveInfo
102
91
*/
103
- public function setFieldNodeData ( $ spreadNode , $ resolveInfo )
92
+ public function getQueryData ( $ query , $ resolveInfo )
104
93
{
105
- $ fragmentFields =[];
106
94
$ selectedFields = [];
107
- if (isset ($ spreadNode ->selectionSet ->selections )) {
108
- if ($ spreadNode ->kind === NodeKind::FIELD && isset ($ spreadNode ->name )) {
109
- $ selectedFields [] = $ spreadNode ->name ->value ;
95
+ $ fragmentFields = [];
96
+ foreach ($ query as $ field ) {
97
+ if ($ field ->kind === NodeKind::INLINE_FRAGMENT ) {
98
+ $ fragmentFields [] = $ this ->addInlineFragmentFields ($ resolveInfo , $ field );
99
+ } elseif ($ field ->kind === NodeKind::FRAGMENT_SPREAD &&
100
+ ($ spreadFragmentNode = $ resolveInfo ->fragments [$ field ->name ->value ])) {
101
+
102
+ foreach ($ spreadFragmentNode ->selectionSet ->selections as $ spreadNode ) {
103
+ if (isset ($ spreadNode ->selectionSet ->selections )) {
104
+ if ($ spreadNode ->kind === NodeKind::FIELD && isset ($ spreadNode ->name )) {
105
+ $ selectedFields [] = $ spreadNode ->name ->value ;
106
+ }
107
+ $ fragmentFields [] = $ this ->getQueryFields ($ spreadNode , $ resolveInfo );
108
+ } else {
109
+ $ selectedFields [] = $ spreadNode ->name ->value ;
110
+ }
111
+ }
112
+ } else {
113
+ $ selectedFields [] = $ field ->name ->value ;
110
114
}
111
- $ fragmentFields [] = $ this ->getQueryFields ($ spreadNode , $ resolveInfo );
112
- } else {
113
- $ selectedFields [] = $ spreadNode ->name ->value ;
114
115
}
115
116
$ data =[];
116
- $ data ['fragmentFields ' ]=$ fragmentFields ;
117
117
$ data ['selectedFields ' ]=$ selectedFields ;
118
+ $ data ['fragmentFields ' ]=$ fragmentFields ;
118
119
return $ data ;
119
120
}
120
121
0 commit comments