Skip to content

Commit 0a8b32b

Browse files
committed
B2B-2469: Improve category children loading
- functional fixes
1 parent c16a510 commit 0a8b32b

File tree

2 files changed

+32
-8
lines changed

2 files changed

+32
-8
lines changed

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

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -100,19 +100,25 @@ public function getId(): int
100100

101101
/**
102102
* Render node and its children as an array recursively.
103+
* Returns null is node model is not set.
103104
*
104-
* @return array
105+
* @return array|null
105106
*/
106-
public function renderArray(): array
107+
public function renderArray(): ?array
107108
{
109+
if (!$this->model) {
110+
return null;
111+
}
108112
return array_merge(
109113
$this->forgery->getHydrator()->hydrateCategory($this->model),
110114
[
111-
'children' => array_map(
112-
function ($node) {
113-
return $node->renderArray();
114-
},
115-
$this->children
115+
'children' => array_filter(
116+
array_map(
117+
function ($node) {
118+
return $node->renderArray();
119+
},
120+
$this->children
121+
)
116122
)
117123
]
118124
);

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

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,26 @@
1010
use Magento\Catalog\Model\Category;
1111
use Magento\Catalog\Model\ResourceModel\Category\Collection;
1212
use Magento\CatalogGraphQl\Model\Resolver\Products\DataProvider\CategoryTree\Wrapper\Forgery;
13+
use Magento\CatalogGraphQl\Model\Resolver\Products\DataProvider\CategoryTree\Wrapper\ForgeryFactory;
1314

15+
/**
16+
* Data extractor for category tree processing in GraphQL resolvers.
17+
*/
1418
class ExtractDataFromCategoryTree
1519
{
20+
/**
21+
* @var ForgeryFactory
22+
*/
23+
private $resultTreeForgeryFactory;
24+
25+
/**
26+
* @param ForgeryFactory $resultTreeForgeryFactory
27+
*/
28+
public function __construct(ForgeryFactory $resultTreeForgeryFactory)
29+
{
30+
$this->resultTreeForgeryFactory = $resultTreeForgeryFactory;
31+
}
32+
1633
/**
1734
* Build result tree from collection
1835
*
@@ -22,7 +39,8 @@ class ExtractDataFromCategoryTree
2239
*/
2340
public function buildTree(Collection $collection, array $topLevelCategories) : array
2441
{
25-
$forgery = new Forgery();
42+
/** @var Forgery $forgery */
43+
$forgery = $this->resultTreeForgeryFactory->create();
2644
/** @var Category $item */
2745
foreach ($collection->getItems() as $item) {
2846
$forgery->forge($item);

0 commit comments

Comments
 (0)