Newer
Older
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
<?php
declare(strict_types=1);
namespace NicolasBejean\CategoryWidget\Model\Resolver;
use \NicolasBejean\CategoryWidget\Model\Resolver\DataProvider\CategoryWidget as CategoryWidgetDataProvider;
use \Magento\Framework\GraphQl\Config\Element\Field;
use \Magento\Framework\GraphQl\Query\ResolverInterface;
use \Magento\Framework\GraphQl\Schema\Type\ResolveInfo;
use \Magento\Framework\Exception\NoSuchEntityException;
use \Magento\Framework\GraphQl\Exception\GraphQlInputException;
use \Magento\Framework\GraphQl\Exception\GraphQlNoSuchEntityException;
/**
* Class CategoryWidgets
*
* @category PHP
* @package NicolasBejean\CategoryWidget\Model\Resolver
* @author Nicolas Béjean <nicolas@bejean.eu>
* @license https://github.com/nicolasbejean/category-widget/blob/master/licence.txt BSD Licence
* @link https://www.bejean.eu
*/
class CategoryWidgets implements ResolverInterface
{
/**
* @var CategoryWidgetDataProvider
*/
private $dataProvider;
/**
* @param CategoryWidgetDataProvider $dataProvider
*/
public function __construct(
CategoryWidgetDataProvider $dataProvider
) {
$this->dataProvider = $dataProvider;
}
/**
* @inheritdoc
*/
public function resolve(
Field $field,
$context,
ResolveInfo $info,
array $value = null,
array $args = null
) {
$categoryWidgetIdentifiers = $this->getCategoryWidgetIdentifiers($args);
$categoryWidgetsData = $this->getCategoryWidgetsData($categoryWidgetIdentifiers);
$resultData = [
'items' => $categoryWidgetsData,
];
return $resultData;
}
/**
* Get Category Widget identifiers
*
* @param array $args
* @return string[]
* @throws GraphQlInputException
*/
private function getCategoryWidgetIdentifiers(array $args): array
{
if (!isset($args['identifiers']) || !is_array($args['identifiers']) || count($args['identifiers']) === 0) {
throw new GraphQlInputException(__('"identifiers" of Category Widgets should be specified'));
}
return $args['identifiers'];
}
/**
* Get category widgets data
*
* @param array $categoryWidgetIdentifiers
* @return array
* @throws GraphQlNoSuchEntityException
*/
private function getCategoryWidgetsData(array $categoryWidgetIdentifiers): array
{
$categoryWidgetsData = [];
foreach ($categoryWidgetIdentifiers as $categoryWidgetIdentifier) {
try {
$categoryWidgetsData[$categoryWidgetIdentifier] = $this->dataProvider->getData($categoryWidgetIdentifier);
} catch (NoSuchEntityException $e) {
$categoryWidgetsData[$categoryWidgetIdentifier] = new GraphQlNoSuchEntityException(__($e->getMessage()), $e);
}
}
return $categoryWidgetsData;
}
}