Skip to content

Commit aad9bff

Browse files
author
dnyomo
committed
Remove the position from the filter and replaced it with Entity Id
1 parent 3400017 commit aad9bff

File tree

2 files changed

+31
-17
lines changed

2 files changed

+31
-17
lines changed

app/code/Magento/CatalogGraphQl/DataProvider/Product/SearchCriteriaBuilder.php

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ public function build(array $args, bool $includeAggregation): SearchCriteriaInte
101101
}
102102

103103
if (!$searchCriteria->getSortOrders()) {
104-
$this->addDefaultSortOrder($searchCriteria, $isSearch);
104+
$this->addDefaultSortOrder($searchCriteria, $args, $isSearch);
105105
}
106106

107107
$this->addEntityIdSort($searchCriteria, $isSearch);
@@ -199,18 +199,28 @@ private function addFilter(
199199
* Sort by relevance DESC by default
200200
*
201201
* @param SearchCriteriaInterface $searchCriteria
202+
* @param array $args
202203
* @param bool $isSearch
203204
*/
204-
private function addDefaultSortOrder(SearchCriteriaInterface $searchCriteria, $isSearch = false): void
205+
private function addDefaultSortOrder(SearchCriteriaInterface $searchCriteria, array $args, $isSearch = false): void
205206
{
206-
$sortField = $isSearch ? 'relevance' : EavAttributeInterface::POSITION;
207-
$sortDirection = $isSearch ? SortOrder::SORT_DESC : SortOrder::SORT_ASC;
208-
$defaultSortOrder = $this->sortOrderBuilder
209-
->setField($sortField)
210-
->setDirection($sortDirection)
211-
->create();
207+
$defaultSortOrder = [];
208+
if ($isSearch) {
209+
$defaultSortOrder[] = $this->sortOrderBuilder
210+
->setField('relevance')
211+
->setDirection(SortOrder::SORT_DESC)
212+
->create();
213+
} else {
214+
$categoryIdFilter = isset($args['filter']['category_id']) ? $args['filter']['category_id'] : false;
215+
if ($categoryIdFilter && count($categoryIdFilter[array_key_first($categoryIdFilter)]) <= 1) {
216+
$defaultSortOrder[] = $this->sortOrderBuilder
217+
->setField(EavAttributeInterface::POSITION)
218+
->setDirection(SortOrder::SORT_ASC)
219+
->create();
220+
}
221+
}
212222

213-
$searchCriteria->setSortOrders([$defaultSortOrder]);
223+
$searchCriteria->setSortOrders($defaultSortOrder);
214224
}
215225

216226
/**

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

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
use Magento\Framework\Api\SearchCriteriaInterface;
2121
use Magento\Framework\Api\SearchResultsInterface;
2222
use Magento\Framework\Api\SortOrder;
23+
use Magento\Framework\Exception\InputException;
2324
use Magento\GraphQl\Model\Query\ContextInterface;
2425

2526
/**
@@ -151,23 +152,26 @@ private function getSearchResultsApplier(
151152
* @param SearchCriteriaInterface $searchCriteria
152153
* @param array $args
153154
* @return array
155+
* @throws InputException
154156
*/
155157
private function getSortOrderArray(SearchCriteriaInterface $searchCriteria, $args)
156158
{
157159
$ordersArray = [];
158160
$sortOrders = $searchCriteria->getSortOrders();
159161
if (is_array($sortOrders)) {
160162
foreach ($sortOrders as $sortOrder) {
161-
if ($sortOrder->getField() !== '_id') {
162-
if ($sortOrder->getField() == EavAttributeInterface::POSITION) {
163-
if (isset($args['sort'][EavAttributeInterface::POSITION])) {
164-
$sortOrder->setDirection($args['sort'][EavAttributeInterface::POSITION]);
165-
} else {
166-
$sortOrder->setDirection(SortOrder::SORT_DESC);
167-
}
163+
if ($sortOrder->getField() === '_id') {
164+
$sortOrder->setField('entity_id');
165+
$categoryIdFilter = isset($args['filter']['category_id']) ? $args['filter']['category_id'] : false;
166+
if ($categoryIdFilter && count($categoryIdFilter[array_key_first($categoryIdFilter)]) <= 1) {
167+
$sortOrder->setDirection(SortOrder::SORT_ASC);
168168
}
169-
$ordersArray[$sortOrder->getField()] = $sortOrder->getDirection();
170169
}
170+
$ordersArray[$sortOrder->getField()] = $sortOrder->getDirection();
171+
}
172+
if (isset($ordersArray[EavAttributeInterface::POSITION])) {
173+
$ordersArray['entity_id'] = $ordersArray[EavAttributeInterface::POSITION];
174+
unset($ordersArray[EavAttributeInterface::POSITION]);
171175
}
172176
}
173177

0 commit comments

Comments
 (0)