-
-
Notifications
You must be signed in to change notification settings - Fork 50
/
Copy pathSelect.php
124 lines (105 loc) · 2.74 KB
/
Select.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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
<?php
namespace FiveamCode\LaravelNotionApi\Entities\Properties;
use FiveamCode\LaravelNotionApi\Entities\Contracts\Modifiable;
use FiveamCode\LaravelNotionApi\Entities\PropertyItems\SelectItem;
use FiveamCode\LaravelNotionApi\Exceptions\HandlingException;
use Illuminate\Support\Collection;
/**
* Class Select.
*/
class Select extends Property implements Modifiable
{
/**
* @var Collection
*/
private Collection $options;
/**
* @param $id
* @return Select
*/
public static function id(string $id): Select
{
$selectProperty = new Select();
$selectItem = new SelectItem();
$selectItem->setId($id);
$selectProperty->content = $selectItem;
$selectProperty->rawContent = [
'select' => [
'id' => $selectItem->getId(),
],
];
return $selectProperty;
}
/**
* @param $name
* @return Select
*/
public static function value(string $name): Select
{
$selectProperty = new Select();
$selectItem = new SelectItem();
$selectItem->setName($name);
$selectProperty->content = $selectItem;
$selectProperty->rawContent = [
'select' => [
'name' => $selectItem->getName(),
],
];
return $selectProperty;
}
/**
* @throws HandlingException
*/
protected function fillFromRaw(): void
{
parent::fillFromRaw();
if (! is_array($this->rawContent)) {
throw HandlingException::instance('The property-type is select, however the raw data-structure does not reprecent this type. Please check the raw response-data.');
}
if (array_key_exists('options', $this->rawContent)) {
$this->options = new Collection();
foreach ($this->rawContent['options'] as $key => $item) {
$this->options->add(new SelectItem($item));
}
} else {
foreach ($this->rawContent as $key => $item) {
$this->content = new SelectItem($this->rawContent);
}
}
}
/**
* @return SelectItem
*/
public function getContent(): SelectItem
{
return $this->getItem();
}
/**
* @return SelectItem
*/
public function getItem(): SelectItem
{
return $this->content;
}
/**
* @return Collection
*/
public function getOptions(): Collection
{
return $this->options;
}
/**
* @return mixed
*/
public function getName()
{
return $this->content->getName();
}
/**
* @return mixed
*/
public function getColor()
{
return $this->content->getColor();
}
}