Skip to content

Commit 4d50092

Browse files
committed
1.6.9 - add AjaxSelect field
1 parent e234155 commit 4d50092

File tree

5 files changed

+90
-0
lines changed

5 files changed

+90
-0
lines changed

src/Enums/FieldType.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ enum FieldType:string
1414
case DateTime = 'DATETIME';
1515
case TrueFalse = 'TRUE_FALSE';
1616
case Select = 'SELECT';
17+
case AjaxSelect = 'AJAX_SELECT';
1718
case MultiSelect = 'MULTI_SELECT';
1819
case Image = 'IMAGE';
1920
case Gallery = 'GALLERY';

src/FieldFactory.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use OZiTAG\Tager\Backend\Fields\Enums\FieldType;
77
use OZiTAG\Tager\Backend\Fields\Enums\RepeaterView;
88
use OZiTAG\Tager\Backend\Fields\Exceptions\InvalidTypeException;
9+
use OZiTAG\Tager\Backend\Fields\Fields\AjaxSelectField;
910
use OZiTAG\Tager\Backend\Fields\Fields\ButtonField;
1011
use OZiTAG\Tager\Backend\Fields\Fields\ColorField;
1112
use OZiTAG\Tager\Backend\Fields\Fields\DateField;
@@ -54,6 +55,8 @@ public static function create($type, $label, $meta = [])
5455
return new DateTimeField($label);
5556
case FieldType::TrueFalse:
5657
return new TrueFalseField($label);
58+
case FieldType::AjaxSelect:
59+
return new AjaxSelectField($label, $meta['requestUrl']);
5760
case FieldType::Select:
5861
$field = new SelectField($label, $meta['options'] ?? null, $meta['optionsGenerator'] ?? null, $meta['optionsGeneratorParams'] ?? []);
5962
if (isset($meta['publicValueFormatter'])) {

src/Fields/AjaxSelectField.php

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?php
2+
3+
namespace OZiTAG\Tager\Backend\Fields\Fields;
4+
5+
use Illuminate\Support\Facades\App;
6+
use OZiTAG\Tager\Backend\Fields\Base\Field;
7+
use OZiTAG\Tager\Backend\Fields\Contracts\ISelectOptionsGenerator;
8+
use OZiTAG\Tager\Backend\Fields\Enums\FieldType;
9+
10+
class AjaxSelectField extends Field
11+
{
12+
public function __construct(string $label, protected string $requestUrl)
13+
{
14+
parent::__construct($label, FieldType::AjaxSelect);
15+
}
16+
17+
public function getMeta()
18+
{
19+
return [
20+
'requestUrl' => $this->requestUrl,
21+
];
22+
}
23+
24+
public function getTypeInstance()
25+
{
26+
$type = parent::getTypeInstance();
27+
return $type;
28+
}
29+
}

src/TypeFactory.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use OZiTAG\Tager\Backend\Fields\Contracts\IType;
66
use OZiTAG\Tager\Backend\Fields\Enums\FieldType;
7+
use OZiTAG\Tager\Backend\Fields\Types\AjaxSelectType;
78
use OZiTAG\Tager\Backend\Fields\Types\ButtonType;
89
use OZiTAG\Tager\Backend\Fields\Types\ColorType;
910
use OZiTAG\Tager\Backend\Fields\Types\DateTimeType;
@@ -49,6 +50,8 @@ public static function create(FieldType $fieldType): IType
4950
return new TrueFalseType();
5051
case FieldType::Select:
5152
return new SelectType();
53+
case FieldType::AjaxSelect:
54+
return new AjaxSelectType();
5255
case FieldType::MultiSelect:
5356
return new MultiSelectType();
5457
case FieldType::Image:

src/Types/AjaxSelectType.php

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
<?php
2+
3+
namespace OZiTAG\Tager\Backend\Fields\Types;
4+
5+
use Illuminate\Support\Facades\App;
6+
use OZiTAG\Tager\Backend\Fields\Contracts\IPublicValueFormatter;
7+
use OZiTAG\Tager\Backend\Fields\Enums\FieldType;
8+
use OZiTAG\Tager\Backend\Utils\Helpers\StringHelper;
9+
10+
class AjaxSelectType extends StringType
11+
{
12+
public function getType()
13+
{
14+
return FieldType::Select;
15+
}
16+
17+
public function getLabelValue(){
18+
$value = $this->getValue();
19+
20+
return $value['label'] ?? null;
21+
}
22+
23+
public function getDatabaseValue()
24+
{
25+
return $this->value && is_array($this->value) ? json_encode($this->value) : null;
26+
}
27+
28+
public function getAdminJson()
29+
{
30+
return $this->getValue();
31+
}
32+
33+
public function getAdminFullJson()
34+
{
35+
return $this->getValue();
36+
}
37+
38+
public function loadValueFromDatabase($value)
39+
{
40+
if(StringHelper::isJson($value)) {
41+
$jsonDecoded = @json_decode($value, true);
42+
43+
if ($jsonDecoded === null && json_last_error() !== JSON_ERROR_NONE) {
44+
$value = ['value' => $value, 'label' => $value];
45+
} else {
46+
$value = $jsonDecoded;
47+
}
48+
} else{
49+
$value = ['value' => $value, 'label' => $value];
50+
}
51+
52+
$this->setValue($value);
53+
}
54+
}

0 commit comments

Comments
 (0)