Skip to content

Commit 2cc0a1f

Browse files
authored
Merge pull request #576 from magento-performance/ACPT-1665
ACPT-1665:Fix searchConfig merge in SearchCriteriaBuilder
2 parents 2feb4ea + 1a58d72 commit 2cc0a1f

File tree

3 files changed

+62
-5
lines changed

3 files changed

+62
-5
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\CatalogGraphQl\DataProvider\Product;
7+
8+
use Magento\Framework\ObjectManager\ResetAfterRequestInterface;
9+
10+
/**
11+
* Builds request specific Product Search Query
12+
*/
13+
class RequestDataBuilder implements ResetAfterRequestInterface
14+
{
15+
private array $data;
16+
17+
public function __construct()
18+
{
19+
$this->_resetState();
20+
}
21+
22+
public function setData($data)
23+
{
24+
$this->data = $data;
25+
}
26+
27+
public function getData(string $key)
28+
{
29+
return $this->data[$key] ?? null;
30+
31+
}
32+
33+
/**
34+
* @inheritDoc
35+
*/
36+
public function _resetState(): void
37+
{
38+
$this->data = [];
39+
}
40+
}

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

+6-2
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,8 @@ class SearchCriteriaBuilder
6969
*/
7070
private SearchConfig $searchConfig;
7171

72+
private RequestDataBuilder $localData;
73+
7274
/**
7375
* @param Builder $builder
7476
* @param ScopeConfigInterface $scopeConfig
@@ -87,7 +89,8 @@ public function __construct(
8789
Visibility $visibility,
8890
SortOrderBuilder $sortOrderBuilder = null,
8991
Config $eavConfig = null,
90-
SearchConfig $searchConfig = null
92+
SearchConfig $searchConfig = null,
93+
RequestDataBuilder $localData = null,
9194
) {
9295
$this->scopeConfig = $scopeConfig;
9396
$this->filterBuilder = $filterBuilder;
@@ -97,6 +100,7 @@ public function __construct(
97100
$this->sortOrderBuilder = $sortOrderBuilder ?? ObjectManager::getInstance()->get(SortOrderBuilder::class);
98101
$this->eavConfig = $eavConfig ?? ObjectManager::getInstance()->get(Config::class);
99102
$this->searchConfig = $searchConfig ?? ObjectManager::getInstance()->get(SearchConfig::class);
103+
$this->localData = $localData ?? ObjectManager::getInstance()->get(RequestDataBuilder::class);
100104
}
101105

102106
/**
@@ -169,7 +173,7 @@ private function updateMatchTypeRequestConfig(string $requestName, array $partia
169173
}
170174
}
171175
}
172-
$this->searchConfig->merge([$requestName => $data]);
176+
$this->localData->setData([$requestName => $data]);
173177
}
174178

175179
/**

lib/internal/Magento/Framework/Search/Request/Builder.php

+16-3
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
namespace Magento\Framework\Search\Request;
88

9+
use Magento\CatalogGraphQl\DataProvider\Product\RequestDataBuilder;
910
use Magento\Framework\Api\SortOrder;
1011
use Magento\Framework\ObjectManager\ResetAfterRequestInterface;
1112
use Magento\Framework\ObjectManagerInterface;
@@ -49,6 +50,8 @@ class Builder implements ResetAfterRequestInterface
4950
*/
5051
private $cleaner;
5152

53+
private RequestDataBuilder $localData;
54+
5255
/**
5356
* Request Builder constructor
5457
*
@@ -57,12 +60,18 @@ class Builder implements ResetAfterRequestInterface
5760
* @param Binder $binder
5861
* @param Cleaner $cleaner
5962
*/
60-
public function __construct(ObjectManagerInterface $objectManager, Config $config, Binder $binder, Cleaner $cleaner)
63+
public function __construct(
64+
ObjectManagerInterface $objectManager,
65+
Config $config,
66+
Binder $binder,
67+
Cleaner $cleaner,
68+
RequestDataBuilder $localData = null)
6169
{
6270
$this->objectManager = $objectManager;
6371
$this->config = $config;
6472
$this->binder = $binder;
6573
$this->cleaner = $cleaner;
74+
$this->localData = $localData ?? $this->objectManager->get(RequestDataBuilder::class);
6675
}
6776

6877
/**
@@ -151,8 +160,12 @@ public function create()
151160
throw new \InvalidArgumentException("Request name not defined.");
152161
}
153162
$requestName = $this->data['requestName'];
154-
/** @var array $data */
155-
$data = $this->config->get($requestName);
163+
if ($this->localData->getData($requestName)) {
164+
$data = $this->localData->getData($requestName);
165+
} else {
166+
/** @var array $data */
167+
$data = $this->config->get($requestName);
168+
}
156169
if ($data === null) {
157170
throw new NonExistingRequestNameException(new Phrase("Request name '%1' doesn't exist.", [$requestName]));
158171
}

0 commit comments

Comments
 (0)