-
Notifications
You must be signed in to change notification settings - Fork 0
/
CityDataProvider.php
110 lines (102 loc) · 3.09 KB
/
CityDataProvider.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
<?php
declare(strict_types=1);
namespace Engine\Location\Ui\DataProvider;
use Engine\Location\Api\Data\CityInterface;
use Engine\Location\Api\CityRepositoryInterface;
use Magento\Framework\Api\FilterBuilder;
use Magento\Framework\Api\Search\ReportingInterface;
use Magento\Framework\Api\Search\SearchCriteriaBuilder;
use Magento\Framework\App\RequestInterface;
use Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider;
use Magento\Ui\DataProvider\SearchResultFactory;
/**
* @author naydav <valeriy.nayda@gmail.com>
* @api
*/
class CityDataProvider extends DataProvider
{
/**
* @var CityRepositoryInterface
*/
private $cityRepository;
/**
* @var SearchResultFactory
*/
private $searchResultFactory;
/**
* @param string $name
* @param string $primaryFieldName
* @param string $requestFieldName
* @param ReportingInterface $reporting
* @param SearchCriteriaBuilder $searchCriteriaBuilder
* @param RequestInterface $request
* @param FilterBuilder $filterBuilder
* @param CityRepositoryInterface $cityRepository
* @param SearchResultFactory $searchResultFactory
* @param array $meta
* @param array $data
*/
public function __construct(
$name,
$primaryFieldName,
$requestFieldName,
ReportingInterface $reporting,
SearchCriteriaBuilder $searchCriteriaBuilder,
RequestInterface $request,
FilterBuilder $filterBuilder,
CityRepositoryInterface $cityRepository,
SearchResultFactory $searchResultFactory,
array $meta = [],
array $data = []
) {
parent::__construct(
$name,
$primaryFieldName,
$requestFieldName,
$reporting,
$searchCriteriaBuilder,
$request,
$filterBuilder,
$meta,
$data
);
$this->cityRepository = $cityRepository;
$this->searchResultFactory = $searchResultFactory;
}
/**
* @inheritdoc
*/
public function getData()
{
$data = parent::getData();
if ('engine_location_city_form_data_source' === $this->name) {
// It is need for support of several fieldsets.
// For details see \Magento\Ui\Component\Form::getDataSourceData
if ($data['totalRecords'] > 0) {
$cityId = $data['items'][0][CityInterface::CITY_ID];
$dataForSingle[$cityId] = [
'general' => $data['items'][0],
];
$data = $dataForSingle;
} else {
$data = [];
}
}
return $data;
}
/**
* @inheritdoc
*/
public function getSearchResult()
{
$searchCriteria = $this->getSearchCriteria();
$result = $this->cityRepository->getList($searchCriteria);
$searchResult = $this->searchResultFactory->create(
$result->getItems(),
$result->getTotalCount(),
$searchCriteria,
CityInterface::CITY_ID
);
return $searchResult;
}
}