15
15
use Magento \Framework \GraphQl \Schema \Type \ResolveInfo ;
16
16
use Magento \Catalog \Model \Layer \Resolver ;
17
17
use Magento \CatalogGraphQl \DataProvider \Product \SearchCriteriaBuilder ;
18
+ use Magento \Framework \GraphQl \Query \Uid ;
19
+ use Magento \Framework \App \ObjectManager ;
18
20
19
21
/**
20
22
* Products field resolver, used for GraphQL request processing.
@@ -31,17 +33,23 @@ class Products implements ResolverInterface
31
33
*/
32
34
private $ searchApiCriteriaBuilder ;
33
35
36
+ /** @var Uid */
37
+ private $ uidEncoder ;
38
+
34
39
/**
35
40
* @param ProductQueryInterface $searchQuery
36
41
* @param SearchCriteriaBuilder|null $searchApiCriteriaBuilder
42
+ * @param Uid|null $uidEncoder
37
43
*/
38
44
public function __construct (
39
45
ProductQueryInterface $ searchQuery ,
40
- SearchCriteriaBuilder $ searchApiCriteriaBuilder = null
46
+ SearchCriteriaBuilder $ searchApiCriteriaBuilder = null ,
47
+ Uid $ uidEncoder = null
41
48
) {
42
49
$ this ->searchQuery = $ searchQuery ;
43
50
$ 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);
45
53
}
46
54
47
55
/**
@@ -80,6 +88,10 @@ public function resolve(
80
88
'layer_type ' => isset ($ args ['search ' ]) ? Resolver::CATALOG_LAYER_SEARCH : Resolver::CATALOG_LAYER_CATEGORY ,
81
89
];
82
90
91
+ if (isset ($ args ['filter ' ]['category_uid ' ])) {
92
+ $ args ['filter ' ]['category_id ' ] = $ this ->getFilterCategoryIdFromCategoryUid ($ args ['filter ' ]['category_uid ' ]);
93
+ }
94
+
83
95
if (isset ($ args ['filter ' ]['category_id ' ])) {
84
96
$ data ['categories ' ] = $ args ['filter ' ]['category_id ' ]['eq ' ] ?? $ args ['filter ' ]['category_id ' ]['in ' ];
85
97
$ data ['categories ' ] = is_array ($ data ['categories ' ]) ? $ data ['categories ' ] : [$ data ['categories ' ]];
@@ -88,6 +100,26 @@ public function resolve(
88
100
return $ data ;
89
101
}
90
102
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
+
91
123
/**
92
124
* Validate input arguments
93
125
*
0 commit comments