Skip to content

Commit f6e2e29

Browse files
author
Munkh-Ulzii Balidar
committed
28584 fix dependency
1 parent 4511c46 commit f6e2e29

File tree

3 files changed

+32
-47
lines changed

3 files changed

+32
-47
lines changed

app/code/Magento/CatalogGraphQl/Model/AttributesJoiner.php

Lines changed: 20 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
namespace Magento\CatalogGraphQl\Model;
99

1010
use GraphQL\Language\AST\FieldNode;
11-
use GraphQL\Language\AST\FragmentSpreadNode;
1211
use GraphQL\Language\AST\InlineFragmentNode;
1312
use GraphQL\Language\AST\NodeKind;
1413
use Magento\Eav\Model\Entity\Collection\AbstractCollection;
@@ -34,11 +33,6 @@ class AttributesJoiner
3433
*/
3534
private $fieldToAttributeMap = [];
3635

37-
/**
38-
* @var ResolveInfo
39-
*/
40-
private $resolverInfo = null;
41-
4236
/**
4337
* @param array $fieldToAttributeMap
4438
*/
@@ -52,11 +46,12 @@ public function __construct(array $fieldToAttributeMap = [])
5246
*
5347
* @param FieldNode $fieldNode
5448
* @param AbstractCollection $collection
49+
* @param ResolveInfo $resolverInfo
5550
* @return void
5651
*/
57-
public function join(FieldNode $fieldNode, AbstractCollection $collection): void
52+
public function join(FieldNode $fieldNode, AbstractCollection $collection, ResolveInfo $resolverInfo): void
5853
{
59-
foreach ($this->getQueryFields($fieldNode) as $field) {
54+
foreach ($this->getQueryFields($fieldNode, $resolverInfo) as $field) {
6055
$this->addFieldToCollection($collection, $field);
6156
}
6257
}
@@ -65,22 +60,25 @@ public function join(FieldNode $fieldNode, AbstractCollection $collection): void
6560
* Get an array of queried fields.
6661
*
6762
* @param FieldNode $fieldNode
63+
* @param ResolveInfo $resolverInfo
6864
* @return string[]
6965
*/
70-
public function getQueryFields(FieldNode $fieldNode): array
66+
public function getQueryFields(FieldNode $fieldNode, ResolveInfo $resolveInfo): array
7167
{
7268
if (null === $this->getFieldNodeSelections($fieldNode)) {
7369
$query = $fieldNode->selectionSet->selections;
7470
$selectedFields = [];
7571
/** @var FieldNode $field */
7672
foreach ($query as $field) {
7773
if ($field->kind === NodeKind::INLINE_FRAGMENT) {
78-
$inlineFragmentFields = $this->addInlineFragmentFields($field);
74+
$inlineFragmentFields = $this->addInlineFragmentFields($resolveInfo, $field);
7975
$selectedFields = array_merge($selectedFields, $inlineFragmentFields);
80-
} elseif ($field->kind === NodeKind::FRAGMENT_SPREAD && isset($this->resolverInfo->fragments[$field->name->value])) {
81-
foreach ($this->resolverInfo->fragments[$field->name->value]->selectionSet->selections as $spreadNode) {
76+
} elseif ($field->kind === NodeKind::FRAGMENT_SPREAD &&
77+
($spreadFragmentNode = $resolveInfo->fragments[$field->name->value])) {
78+
79+
foreach ($spreadFragmentNode->selectionSet->selections as $spreadNode) {
8280
if (isset($spreadNode->selectionSet->selections)) {
83-
$fragmentSpreadFields = $this->getQueryFields($spreadNode);
81+
$fragmentSpreadFields = $this->getQueryFields($spreadNode, $resolveInfo);
8482
$selectedFields = array_merge($selectedFields, $fragmentSpreadFields);
8583
} else {
8684
$selectedFields[] = $spreadNode->name->value;
@@ -90,7 +88,7 @@ public function getQueryFields(FieldNode $fieldNode): array
9088
$selectedFields[] = $field->name->value;
9189
}
9290
}
93-
$this->setSelectionsForFieldNode($fieldNode, $selectedFields);
91+
$this->setSelectionsForFieldNode($fieldNode, array_unique($selectedFields));
9492
}
9593

9694
return $this->getFieldNodeSelections($fieldNode);
@@ -99,19 +97,23 @@ public function getQueryFields(FieldNode $fieldNode): array
9997
/**
10098
* Add fields from inline fragment nodes
10199
*
100+
* @param ResolveInfo $resolveInfo
102101
* @param InlineFragmentNode $inlineFragmentField
103102
* @param array $inlineFragmentFields
104103
* @return string[]
105104
*/
106-
private function addInlineFragmentFields(InlineFragmentNode $inlineFragmentField, $inlineFragmentFields = [])
107-
{
105+
private function addInlineFragmentFields(
106+
ResolveInfo $resolveInfo,
107+
InlineFragmentNode $inlineFragmentField,
108+
$inlineFragmentFields = []
109+
): array {
108110
$query = $inlineFragmentField->selectionSet->selections;
109111
/** @var FieldNode $field */
110112
foreach ($query as $field) {
111113
if ($field->kind === NodeKind::INLINE_FRAGMENT) {
112-
$this->addInlineFragmentFields($field, $inlineFragmentFields);
114+
$this->addInlineFragmentFields($resolveInfo, $field, $inlineFragmentFields);
113115
} elseif (isset($field->selectionSet->selections)) {
114-
if (is_array($queryFields = $this->getQueryFields($field))) {
116+
if (is_array($queryFields = $this->getQueryFields($field, $resolveInfo))) {
115117
$inlineFragmentFields = array_merge($inlineFragmentFields, $queryFields);
116118
}
117119
} else {
@@ -170,12 +172,4 @@ private function setSelectionsForFieldNode(FieldNode $fieldNode, array $selected
170172
{
171173
$this->queryFields[$fieldNode->name->value][$fieldNode->name->loc->start] = $selectedFields;
172174
}
173-
174-
/**
175-
* @param ResolveInfo $resolverInfo
176-
*/
177-
public function setResolverInfo(ResolveInfo $resolverInfo): void
178-
{
179-
$this->resolverInfo = $resolverInfo;
180-
}
181175
}

app/code/Magento/CatalogGraphQl/Model/Resolver/Categories.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,6 @@ public function resolve(Field $field, $context, ResolveInfo $info, array $value
112112
$categoryIds = $this->productCategories->getCategoryIdsByProduct((int)$product->getId(), (int)$storeId);
113113
$this->categoryIds = array_merge($this->categoryIds, $categoryIds);
114114
$that = $this;
115-
$that->attributesJoiner->setResolverInfo($info);
116115

117116
return $this->valueFactory->create(
118117
function () use ($that, $categoryIds, $info) {
@@ -122,7 +121,7 @@ function () use ($that, $categoryIds, $info) {
122121
}
123122

124123
if (!$this->collection->isLoaded()) {
125-
$that->attributesJoiner->join($info->fieldNodes[0], $this->collection);
124+
$that->attributesJoiner->join($info->fieldNodes[0], $this->collection, $info);
126125
$this->collection->addIdFilter($this->categoryIds);
127126
}
128127
/** @var CategoryInterface | \Magento\Catalog\Model\Category $item */
@@ -131,7 +130,7 @@ function () use ($that, $categoryIds, $info) {
131130
// Try to extract all requested fields from the loaded collection data
132131
$categories[$item->getId()] = $this->categoryHydrator->hydrateCategory($item, true);
133132
$categories[$item->getId()]['model'] = $item;
134-
$requestedFields = $that->attributesJoiner->getQueryFields($info->fieldNodes[0]);
133+
$requestedFields = $that->attributesJoiner->getQueryFields($info->fieldNodes[0], $info);
135134
$extractedFields = array_keys($categories[$item->getId()]);
136135
$foundFields = array_intersect($requestedFields, $extractedFields);
137136
if (count($requestedFields) === count($foundFields)) {

app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/CategoryTree.php

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,6 @@ class CategoryTree
5454
*/
5555
private $metadata;
5656

57-
/**
58-
* @var ResolveInfo
59-
*/
60-
private $resolverInfo;
61-
6257
/**
6358
* @param CollectionFactory $collectionFactory
6459
* @param AttributesJoiner $attributesJoiner
@@ -91,9 +86,7 @@ public function getTree(ResolveInfo $resolveInfo, int $rootCategoryId): \Iterato
9186
{
9287
$categoryQuery = $resolveInfo->fieldNodes[0];
9388
$collection = $this->collectionFactory->create();
94-
$this->resolverInfo = $resolveInfo;
95-
$this->attributesJoiner->setResolverInfo($resolveInfo);
96-
$this->joinAttributesRecursively($collection, $categoryQuery);
89+
$this->joinAttributesRecursively($collection, $categoryQuery, $resolveInfo);
9790
$depth = $this->depthCalculator->calculate($resolveInfo, $categoryQuery);
9891
$level = $this->levelCalculator->calculate($rootCategoryId);
9992

@@ -132,28 +125,27 @@ public function getTree(ResolveInfo $resolveInfo, int $rootCategoryId): \Iterato
132125
*
133126
* @param Collection $collection
134127
* @param FieldNode $fieldNode
128+
* @param ResolveInfo $resolveInfo
135129
* @return void
136130
*/
137-
private function joinAttributesRecursively(Collection $collection, FieldNode $fieldNode) : void
138-
{
131+
private function joinAttributesRecursively(
132+
Collection $collection,
133+
FieldNode $fieldNode,
134+
ResolveInfo $resolveInfo
135+
): void {
139136
if (!isset($fieldNode->selectionSet->selections)) {
140137
return;
141138
}
142139

143140
$subSelection = $fieldNode->selectionSet->selections;
144-
$this->attributesJoiner->join($fieldNode, $collection);
141+
$this->attributesJoiner->join($fieldNode, $collection, $resolveInfo);
145142

146143
/** @var FieldNode $node */
147144
foreach ($subSelection as $node) {
148-
if ($node->kind === NodeKind::INLINE_FRAGMENT) {
145+
if ($node->kind === NodeKind::INLINE_FRAGMENT || $node->kind === NodeKind::FRAGMENT_SPREAD) {
149146
continue;
150-
} elseif ($node->kind === NodeKind::FRAGMENT_SPREAD && isset($this->resolverInfo->fragments[$node->name->value])) {
151-
foreach ($this->resolverInfo->fragments[$node->name->value]->selectionSet->selections as $spreadNode) {
152-
$this->joinAttributesRecursively($collection, $spreadNode);
153-
}
154-
} else {
155-
$this->joinAttributesRecursively($collection, $node);
156147
}
148+
$this->joinAttributesRecursively($collection, $node, $resolveInfo);
157149
}
158150
}
159151
}

0 commit comments

Comments
 (0)