@@ -70,33 +70,16 @@ public function getQueryFields(FieldNode $fieldNode, ResolveInfo $resolveInfo):
70
70
$ selectedFields = [];
71
71
$ fragmentFields = [];
72
72
/** @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
- if (isset ($ spreadNode ->selectionSet ->selections )) {
81
- if ($ spreadNode ->kind === NodeKind::FIELD && isset ($ spreadNode ->name )) {
82
- $ selectedFields [] = $ spreadNode ->name ->value ;
83
- }
84
- $ fragmentFields [] = $ this ->getQueryFields ($ spreadNode , $ resolveInfo );
85
- } else {
86
- $ selectedFields [] = $ spreadNode ->name ->value ;
87
- }
88
- }
89
- } else {
90
- $ selectedFields [] = $ field ->name ->value ;
91
- }
92
- }
73
+ $ response =$ this ->test ($ query , $ resolveInfo );
74
+ $ fragmentFields =$ response ['fragmentFields ' ];
75
+ $ selectedFields =$ response ['selectedFields ' ];
93
76
if ($ fragmentFields ) {
94
77
$ selectedFields = array_merge ([], $ selectedFields , ...$ fragmentFields );
95
78
}
96
- $ this ->setSelectionsForFieldNode ($ fieldNode , array_unique ($ selectedFields ));
79
+ $ this ->setSelectionsForFieldNode ($ fieldNode , array_unique ($ selectedFields ));
97
80
}
98
81
99
- return $ this ->getFieldNodeSelections ($ fieldNode );
82
+ return $ this ->getFieldNodeSelections ($ fieldNode );
100
83
}
101
84
102
85
/**
@@ -181,4 +164,37 @@ private function setSelectionsForFieldNode(FieldNode $fieldNode, array $selected
181
164
{
182
165
$ this ->queryFields [$ fieldNode ->name ->value ][$ fieldNode ->name ->loc ->start ] = $ selectedFields ;
183
166
}
167
+
168
+ /**
169
+ * Get array for fragment fields
170
+ *
171
+ * @param array $query
172
+ * @param ResolveInfo $resolveInfo
173
+ */
174
+ public function test ($ query , $ resolveInfo )
175
+ {
176
+ $ selectedFields = [];
177
+ $ fragmentFields = [];
178
+ foreach ($ query as $ field ) {
179
+ if ($ field ->kind === NodeKind::INLINE_FRAGMENT ) {
180
+ $ fragmentFields [] = $ this ->addInlineFragmentFields ($ resolveInfo , $ field );
181
+ } elseif ($ field ->kind === NodeKind::FRAGMENT_SPREAD &&
182
+ ($ spreadFragmentNode = $ resolveInfo ->fragments [$ field ->name ->value ])) {
183
+
184
+ foreach ($ spreadFragmentNode ->selectionSet ->selections as $ spreadNode ) {
185
+ if (isset ($ spreadNode ->selectionSet ->selections )) {
186
+ $ fragmentFields [] = $ this ->getQueryFields ($ spreadNode , $ resolveInfo );
187
+ } else {
188
+ $ selectedFields [] = $ spreadNode ->name ->value ;
189
+ }
190
+ }
191
+ } else {
192
+ $ selectedFields [] = $ field ->name ->value ;
193
+ }
194
+ $ data =[];
195
+ $ data ['fragmentFields ' ]=$ fragmentFields ;
196
+ $ data ['selectedFields ' ]=$ selectedFields ;
197
+ return $ data ;
198
+ }
199
+ }
184
200
}
0 commit comments