1515use Magento \Framework \GraphQl \Schema \Type \ResolveInfo ;
1616use Magento \Catalog \Model \Layer \Resolver ;
1717use Magento \CatalogGraphQl \DataProvider \Product \SearchCriteriaBuilder ;
18+ use Magento \Framework \GraphQl \Query \Uid ;
19+ use Magento \Framework \App \ObjectManager ;
1820
1921/**
2022 * Products field resolver, used for GraphQL request processing.
@@ -31,17 +33,23 @@ class Products implements ResolverInterface
3133 */
3234 private $ searchApiCriteriaBuilder ;
3335
36+ /** @var Uid */
37+ private $ uidEncoder ;
38+
3439 /**
3540 * @param ProductQueryInterface $searchQuery
3641 * @param SearchCriteriaBuilder|null $searchApiCriteriaBuilder
42+ * @param Uid|null $uidEncoder
3743 */
3844 public function __construct (
3945 ProductQueryInterface $ searchQuery ,
40- SearchCriteriaBuilder $ searchApiCriteriaBuilder = null
46+ SearchCriteriaBuilder $ searchApiCriteriaBuilder = null ,
47+ Uid $ uidEncoder = null
4148 ) {
4249 $ this ->searchQuery = $ searchQuery ;
4350 $ this ->searchApiCriteriaBuilder = $ searchApiCriteriaBuilder ??
44- \Magento \Framework \App \ObjectManager::getInstance ()->get (SearchCriteriaBuilder::class);
51+ ObjectManager::getInstance ()->get (SearchCriteriaBuilder::class);
52+ $ this ->uidEncoder = $ uidEncoder ?: ObjectManager::getInstance ()->get (Uid::class);
4553 }
4654
4755 /**
@@ -80,6 +88,10 @@ public function resolve(
8088 'layer_type ' => isset ($ args ['search ' ]) ? Resolver::CATALOG_LAYER_SEARCH : Resolver::CATALOG_LAYER_CATEGORY ,
8189 ];
8290
91+ if (isset ($ args ['filter ' ]['category_uid ' ])) {
92+ $ args ['filter ' ]['category_id ' ] = $ this ->getFilterCategoryIdFromCategoryUid ($ args ['filter ' ]['category_uid ' ]);
93+ }
94+
8395 if (isset ($ args ['filter ' ]['category_id ' ])) {
8496 $ data ['categories ' ] = $ args ['filter ' ]['category_id ' ]['eq ' ] ?? $ args ['filter ' ]['category_id ' ]['in ' ];
8597 $ data ['categories ' ] = is_array ($ data ['categories ' ]) ? $ data ['categories ' ] : [$ data ['categories ' ]];
@@ -88,6 +100,26 @@ public function resolve(
88100 return $ data ;
89101 }
90102
103+ /**
104+ * Get filter category_id by category_uid
105+ *
106+ * @param array $filterCategoryUid
107+ * @return array|null
108+ */
109+ private function getFilterCategoryIdFromCategoryUid (array $ filterCategoryUid ): ?array
110+ {
111+ $ filterCategoryId = null ;
112+ if (isset ($ filterCategoryUid ['eq ' ])) {
113+ $ filterCategoryId ['eq ' ] = $ this ->uidEncoder
114+ ->decode ((string )$ filterCategoryUid ['eq ' ]);
115+ } elseif (!empty ($ filterCategoryUid ['in ' ])) {
116+ foreach ($ filterCategoryUid ['in ' ] as $ uid ) {
117+ $ filterCategoryId ['in ' ][] = $ this ->uidEncoder ->decode ((string ) $ uid );
118+ }
119+ }
120+ return $ filterCategoryId ;
121+ }
122+
91123 /**
92124 * Validate input arguments
93125 *
0 commit comments