diff --git a/vendor/magento/module-catalog-graph-ql/Model/AttributesJoiner.php b/vendor/magento/module-catalog-graph-ql/Model/AttributesJoiner.php index 34f5dd83168..99d391ef764 100644 --- a/vendor/magento/module-catalog-graph-ql/Model/AttributesJoiner.php +++ b/vendor/magento/module-catalog-graph-ql/Model/AttributesJoiner.php @@ -10,6 +10,7 @@ namespace Magento\CatalogGraphQl\Model; use GraphQL\Language\AST\FieldNode; use GraphQL\Language\AST\InlineFragmentNode; use GraphQL\Language\AST\NodeKind; +use Magento\Catalog\Api\Data\CategoryInterface; use Magento\Eav\Model\Entity\Collection\AbstractCollection; use Magento\Framework\GraphQl\Schema\Type\ResolveInfo; @@ -18,6 +19,7 @@ use Magento\Framework\GraphQl\Schema\Type\ResolveInfo; */ class AttributesJoiner { + private const REQUEST_FIELD_NAME = 'categoryList'; /** * @var array */ @@ -75,7 +77,6 @@ class AttributesJoiner $fragmentFields[] = $this->addInlineFragmentFields($resolveInfo, $field); } elseif ($field->kind === NodeKind::FRAGMENT_SPREAD && ($spreadFragmentNode = $resolveInfo->fragments[$field->name->value])) { - foreach ($spreadFragmentNode->selectionSet->selections as $spreadNode) { if (isset($spreadNode->selectionSet->selections)) { $fragmentFields[] = $this->getQueryFields($spreadNode, $resolveInfo); @@ -85,6 +86,11 @@ class AttributesJoiner } } else { $selectedFields[] = $field->name->value; + $selectedFields = $this->addIsAnchoredAttributeToSelectedFiled( + $resolveInfo, + $field, + $selectedFields + ); } } if ($fragmentFields) { @@ -172,4 +178,24 @@ class AttributesJoiner { $this->queryFields[$fieldNode->name->value][$fieldNode->name->loc->start] = $selectedFields; } + + /** + * Add `is_anchor` attribute to selected field + * + * @param ResolveInfo $resolveInfo + * @param FieldNode $fieldNode + * @param array $selectedFields + * @return array + */ + private function addIsAnchoredAttributeToSelectedFiled( + ResolveInfo $resolveInfo, + FieldNode $fieldNode, + array $selectedFields + ): array { + if ($resolveInfo->fieldName === self::REQUEST_FIELD_NAME + && $fieldNode->name->value === CategoryInterface::KEY_PRODUCT_COUNT) { + $selectedFields[] = 'is_anchor'; + } + return $selectedFields; + } }