Skip to content
This repository was archived by the owner on May 20, 2019. It is now read-only.

Commit 9035d29

Browse files
committed
GraphQL - Created separate resolver for sort_fields
1 parent 02d6a22 commit 9035d29

File tree

4 files changed

+130
-32
lines changed

4 files changed

+130
-32
lines changed
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\CatalogGraphQl\Model\Resolver\Category;
9+
10+
use Magento\Framework\GraphQl\Schema\Type\ResolveInfo;
11+
use Magento\Framework\GraphQl\Config\Element\Field;
12+
use Magento\Framework\GraphQl\Query\Resolver\Value;
13+
use Magento\Framework\GraphQl\Query\Resolver\ValueFactory;
14+
use Magento\Framework\GraphQl\Query\ResolverInterface;
15+
16+
/**
17+
* Retrieves the sort field default value
18+
*/
19+
class SortFieldDefault implements ResolverInterface
20+
{
21+
/**
22+
* @var ValueFactory
23+
*/
24+
private $valueFactory;
25+
26+
/**
27+
* @var \Magento\Catalog\Model\Config
28+
*/
29+
private $catalogConfig;
30+
31+
/**
32+
* @var \Magento\Store\Model\StoreManagerInterface
33+
*/
34+
private $storeManager;
35+
36+
/**
37+
* @param ValueFactory $valueFactory
38+
* @param \Magento\Catalog\Model\Config $catalogConfig
39+
* @param \Magento\Store\Model\StoreManagerInterface $storeManager
40+
*/
41+
public function __construct(
42+
ValueFactory $valueFactory,
43+
\Magento\Catalog\Model\Config $catalogConfig,
44+
\Magento\Store\Model\StoreManagerInterface $storeManager
45+
) {
46+
$this->valueFactory = $valueFactory;
47+
$this->catalogConfig = $catalogConfig;
48+
$this->storeManager = $storeManager;
49+
}
50+
51+
/**
52+
* {@inheritDoc}
53+
*/
54+
public function resolve(Field $field, $context, ResolveInfo $info, array $value = null, array $args = null) : Value
55+
{
56+
$sortFieldDefault = $this->catalogConfig->getProductListDefaultSortBy($this->storeManager->getStore()->getId());
57+
58+
$result = function () use ($sortFieldDefault) {
59+
return $sortFieldDefault;
60+
};
61+
62+
return $this->valueFactory->create($result);
63+
}
64+
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\CatalogGraphQl\Model\Resolver\Category;
9+
10+
use Magento\Framework\GraphQl\Schema\Type\ResolveInfo;
11+
use Magento\Framework\GraphQl\Config\Element\Field;
12+
use Magento\Framework\GraphQl\Query\Resolver\Value;
13+
use Magento\Framework\GraphQl\Query\Resolver\ValueFactory;
14+
use Magento\Framework\GraphQl\Query\ResolverInterface;
15+
16+
/**
17+
* Retrieves the sort fields options information object
18+
*/
19+
class SortFieldsOptions implements ResolverInterface
20+
{
21+
/**
22+
* @var ValueFactory
23+
*/
24+
private $valueFactory;
25+
26+
/**
27+
* @var \Magento\Catalog\Model\Config
28+
*/
29+
private $catalogConfig;
30+
31+
/**
32+
* @param ValueFactory $valueFactory
33+
* @param \Magento\Catalog\Model\Config $catalogConfig
34+
*/
35+
public function __construct(
36+
ValueFactory $valueFactory,
37+
\Magento\Catalog\Model\Config $catalogConfig
38+
) {
39+
$this->valueFactory = $valueFactory;
40+
$this->catalogConfig = $catalogConfig;
41+
}
42+
43+
/**
44+
* {@inheritDoc}
45+
*/
46+
public function resolve(Field $field, $context, ResolveInfo $info, array $value = null, array $args = null) : Value
47+
{
48+
$sortFieldsOptions = [
49+
['key' => 'position', 'label' => 'Position']
50+
];
51+
foreach ($this->catalogConfig->getAttributesUsedForSortBy() as $attribute) {
52+
$sortFieldsOptions[] = ['key' => $attribute->getAttributeCode(), 'label' => $attribute->getStoreLabel()];
53+
}
54+
55+
$result = function () use ($sortFieldsOptions) {
56+
return $sortFieldsOptions;
57+
};
58+
59+
return $this->valueFactory->create($result);
60+
}
61+
}

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

Lines changed: 3 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -53,43 +53,27 @@ class Products implements ResolverInterface
5353
* @var Layer\DataProvider\Filters
5454
*/
5555
private $filtersDataProvider;
56-
57-
/**
58-
* @var \Magento\Catalog\Model\Config
59-
*/
60-
private $catalogConfig;
61-
62-
/**
63-
* @var \Magento\Store\Model\StoreManagerInterface
64-
*/
65-
private $storeManager;
6656

6757
/**
6858
* @param Builder $searchCriteriaBuilder
6959
* @param Search $searchQuery
7060
* @param Filter $filterQuery
7161
* @param ValueFactory $valueFactory
72-
* @param \Magento\Catalog\Model\Config $catalogConfig
73-
* @param \Magento\Store\Model\StoreManagerInterface $storeManager
7462
*/
7563
public function __construct(
7664
Builder $searchCriteriaBuilder,
7765
Search $searchQuery,
7866
Filter $filterQuery,
7967
SearchFilter $searchFilter,
8068
ValueFactory $valueFactory,
81-
\Magento\CatalogGraphQl\Model\Resolver\Layer\DataProvider\Filters $filtersDataProvider,
82-
\Magento\Catalog\Model\Config $catalogConfig,
83-
\Magento\Store\Model\StoreManagerInterface $storeManager
69+
\Magento\CatalogGraphQl\Model\Resolver\Layer\DataProvider\Filters $filtersDataProvider
8470
) {
8571
$this->searchCriteriaBuilder = $searchCriteriaBuilder;
8672
$this->searchQuery = $searchQuery;
8773
$this->filterQuery = $filterQuery;
8874
$this->searchFilter = $searchFilter;
8975
$this->valueFactory = $valueFactory;
9076
$this->filtersDataProvider = $filtersDataProvider;
91-
$this->catalogConfig = $catalogConfig;
92-
$this->storeManager = $storeManager;
9377
}
9478

9579
/**
@@ -134,25 +118,14 @@ public function resolve(
134118
);
135119
}
136120

137-
$options = $this->catalogConfig->getAttributeUsedForSortByArray();
138-
139-
$sortFields = [
140-
'default' => $this->catalogConfig->getProductListDefaultSortBy($this->storeManager->getStore()->getId()),
141-
'options' => []
142-
];
143-
144-
$sortFields['options'][] = ['key' => 'position', 'label' => 'Position'];
145-
foreach ($this->catalogConfig->getAttributesUsedForSortBy() as $attribute) {
146-
$sortFields['options'][] = ['key' => $attribute->getAttributeCode(), 'label' => $attribute->getStoreLabel()];
147-
}
148-
121+
149122
$data = [
150123
'total_count' => $searchResult->getTotalCount(),
151124
'items' => $searchResult->getProductsSearchResult(),
152125
'page_info' => [
153126
'page_size' => $searchCriteria->getPageSize(),
154127
'current_page' => $currentPage,
155-
'sort_fields' => $sortFields,
128+
'sort_fields' => [],
156129
],
157130
'filters' => $this->filtersDataProvider->getData($layerType),
158131

app/code/Magento/GraphQl/etc/schema.graphqls

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,6 @@ type SortField {
3939
}
4040

4141
type SortFields @doc(description: "SortFields contains a default value for sort fields and all available sort fields") {
42-
default: String @doc(description: "Default value of sort fields")
43-
options: [SortField] @doc(description: "Available sort fields")
42+
default: String @doc(description: "Default value of sort fields") @resolver(class: "Magento\\CatalogGraphQl\\Model\\Resolver\\Category\\SortFieldDefault")
43+
options: [SortField] @doc(description: "Available sort fields") @resolver(class: "Magento\\CatalogGraphQl\\Model\\Resolver\\Category\\SortFieldsOptions")
4444
}

0 commit comments

Comments
 (0)