|
1
|
|
|
<?php |
|
2
|
|
|
|
|
3
|
|
|
namespace Encore\Admin\Form\Concerns; |
|
4
|
|
|
|
|
5
|
|
|
use Encore\Admin\Form\Field; |
|
6
|
|
|
use Illuminate\Support\Arr; |
|
7
|
|
|
|
|
8
|
|
|
/** |
|
9
|
|
|
* @method Field\Text text($column, $label = '') |
|
10
|
|
|
* @method Field\Checkbox checkbox($column, $label = '') |
|
11
|
|
|
* @method Field\Radio radio($column, $label = '') |
|
12
|
|
|
* @method Field\Select select($column, $label = '') |
|
13
|
|
|
* @method Field\MultipleSelect multipleSelect($column, $label = '') |
|
14
|
|
|
* @method Field\Textarea textarea($column, $label = '') |
|
15
|
|
|
* @method Field\Hidden hidden($column, $label = '') |
|
16
|
|
|
* @method Field\Id id($column, $label = '') |
|
17
|
|
|
* @method Field\Ip ip($column, $label = '') |
|
18
|
|
|
* @method Field\Url url($column, $label = '') |
|
19
|
|
|
* @method Field\Color color($column, $label = '') |
|
20
|
|
|
* @method Field\Email email($column, $label = '') |
|
21
|
|
|
* @method Field\Mobile mobile($column, $label = '') |
|
22
|
|
|
* @method Field\Slider slider($column, $label = '') |
|
23
|
|
|
* @method Field\File file($column, $label = '') |
|
24
|
|
|
* @method Field\Image image($column, $label = '') |
|
25
|
|
|
* @method Field\Date date($column, $label = '') |
|
26
|
|
|
* @method Field\Datetime datetime($column, $label = '') |
|
27
|
|
|
* @method Field\Time time($column, $label = '') |
|
28
|
|
|
* @method Field\Year year($column, $label = '') |
|
29
|
|
|
* @method Field\Month month($column, $label = '') |
|
30
|
|
|
* @method Field\DateRange dateRange($start, $end, $label = '') |
|
31
|
|
|
* @method Field\DateTimeRange datetimeRange($start, $end, $label = '') |
|
32
|
|
|
* @method Field\TimeRange timeRange($start, $end, $label = '') |
|
33
|
|
|
* @method Field\Number number($column, $label = '') |
|
34
|
|
|
* @method Field\Currency currency($column, $label = '') |
|
35
|
|
|
* @method Field\HasMany hasMany($relationName, $label = '', $callback) |
|
36
|
|
|
* @method Field\SwitchField switch($column, $label = '') |
|
37
|
|
|
* @method Field\Display display($column, $label = '') |
|
38
|
|
|
* @method Field\Rate rate($column, $label = '') |
|
39
|
|
|
* @method Field\Divider divider($title = '') |
|
40
|
|
|
* @method Field\Password password($column, $label = '') |
|
41
|
|
|
* @method Field\Decimal decimal($column, $label = '') |
|
42
|
|
|
* @method Field\Html html($html, $label = '') |
|
43
|
|
|
* @method Field\Tags tags($column, $label = '') |
|
44
|
|
|
* @method Field\Icon icon($column, $label = '') |
|
45
|
|
|
* @method Field\Embeds embeds($column, $label = '', $callback) |
|
46
|
|
|
* @method Field\MultipleImage multipleImage($column, $label = '') |
|
47
|
|
|
* @method Field\MultipleFile multipleFile($column, $label = '') |
|
48
|
|
|
* @method Field\Captcha captcha($column, $label = '') |
|
49
|
|
|
* @method Field\Listbox listbox($column, $label = '') |
|
50
|
|
|
* @method Field\Table table($column, $label, $builder) |
|
51
|
|
|
* @method Field\Timezone timezone($column, $label = '') |
|
52
|
|
|
* @method Field\KeyValue keyValue($column, $label = '') |
|
53
|
|
|
* @method Field\ListField list($column, $label = '') |
|
54
|
|
|
* @method Field\BelongsTo belongsTo($column, $selectable, $label = '') |
|
55
|
|
|
* @method Field\BelongsToMany belongsToMany($column, $selectable, $label = '') |
|
56
|
|
|
* @method Field\FileSelect fileSelect($column, $selectable, $label = '') |
|
57
|
|
|
*/ |
|
58
|
|
|
trait HasFields |
|
59
|
|
|
{ |
|
60
|
|
|
/** |
|
61
|
|
|
* Available fields. |
|
62
|
|
|
* |
|
63
|
|
|
* @var array |
|
64
|
|
|
*/ |
|
65
|
|
|
public static $availableFields = [ |
|
66
|
|
|
'button' => Field\Button::class, |
|
67
|
|
|
'checkbox' => Field\Checkbox::class, |
|
68
|
|
|
'color' => Field\Color::class, |
|
69
|
|
|
'currency' => Field\Currency::class, |
|
70
|
|
|
'date' => Field\Date::class, |
|
71
|
|
|
'dateRange' => Field\DateRange::class, |
|
72
|
|
|
'datetime' => Field\Datetime::class, |
|
73
|
|
|
'dateTimeRange' => Field\DatetimeRange::class, |
|
74
|
|
|
'datetimeRange' => Field\DatetimeRange::class, |
|
75
|
|
|
'decimal' => Field\Decimal::class, |
|
76
|
|
|
'display' => Field\Display::class, |
|
77
|
|
|
'divider' => Field\Divider::class, |
|
78
|
|
|
'embeds' => Field\Embeds::class, |
|
79
|
|
|
'email' => Field\Email::class, |
|
80
|
|
|
'file' => Field\File::class, |
|
81
|
|
|
'hasMany' => Field\HasMany::class, |
|
82
|
|
|
'hidden' => Field\Hidden::class, |
|
83
|
|
|
'id' => Field\Id::class, |
|
84
|
|
|
'image' => Field\Image::class, |
|
85
|
|
|
'ip' => Field\Ip::class, |
|
86
|
|
|
'mobile' => Field\Mobile::class, |
|
87
|
|
|
'month' => Field\Month::class, |
|
88
|
|
|
'multipleSelect' => Field\MultipleSelect::class, |
|
89
|
|
|
'number' => Field\Number::class, |
|
90
|
|
|
'password' => Field\Password::class, |
|
91
|
|
|
'radio' => Field\Radio::class, |
|
92
|
|
|
'rate' => Field\Rate::class, |
|
93
|
|
|
'select' => Field\Select::class, |
|
94
|
|
|
'slider' => Field\Slider::class, |
|
95
|
|
|
'switch' => Field\SwitchField::class, |
|
96
|
|
|
'text' => Field\Text::class, |
|
97
|
|
|
'textarea' => Field\Textarea::class, |
|
98
|
|
|
'time' => Field\Time::class, |
|
99
|
|
|
'timeRange' => Field\TimeRange::class, |
|
100
|
|
|
'url' => Field\Url::class, |
|
101
|
|
|
'year' => Field\Year::class, |
|
102
|
|
|
'html' => Field\Html::class, |
|
103
|
|
|
'tags' => Field\Tags::class, |
|
104
|
|
|
'icon' => Field\Icon::class, |
|
105
|
|
|
'multipleFile' => Field\MultipleFile::class, |
|
106
|
|
|
'multipleImage' => Field\MultipleImage::class, |
|
107
|
|
|
'captcha' => Field\Captcha::class, |
|
108
|
|
|
'listbox' => Field\Listbox::class, |
|
109
|
|
|
'table' => Field\Table::class, |
|
110
|
|
|
'timezone' => Field\Timezone::class, |
|
111
|
|
|
'keyValue' => Field\KeyValue::class, |
|
112
|
|
|
'list' => Field\ListField::class, |
|
113
|
|
|
'belongsTo' => Field\BelongsTo::class, |
|
114
|
|
|
'belongsToMany' => Field\BelongsToMany::class, |
|
115
|
|
|
'fileSelect' => Field\FileSelect::class, |
|
116
|
|
|
]; |
|
117
|
|
|
|
|
118
|
|
|
/** |
|
119
|
|
|
* Form field alias. |
|
120
|
|
|
* |
|
121
|
|
|
* @var array |
|
122
|
|
|
*/ |
|
123
|
|
|
public static $fieldAlias = []; |
|
124
|
|
|
|
|
125
|
|
|
/** |
|
126
|
|
|
* Register custom field. |
|
127
|
|
|
* |
|
128
|
|
|
* @param string $abstract |
|
129
|
|
|
* @param string $class |
|
130
|
|
|
* |
|
131
|
|
|
* @return void |
|
132
|
|
|
*/ |
|
133
|
|
|
public static function extend($abstract, $class) |
|
134
|
|
|
{ |
|
135
|
|
|
static::$availableFields[$abstract] = $class; |
|
136
|
|
|
} |
|
137
|
|
|
|
|
138
|
|
|
/** |
|
139
|
|
|
* Set form field alias. |
|
140
|
|
|
* |
|
141
|
|
|
* @param string $field |
|
142
|
|
|
* @param string $alias |
|
143
|
|
|
* |
|
144
|
|
|
* @return void |
|
145
|
|
|
*/ |
|
146
|
|
|
public static function alias($field, $alias) |
|
147
|
|
|
{ |
|
148
|
|
|
static::$fieldAlias[$alias] = $field; |
|
149
|
|
|
} |
|
150
|
|
|
|
|
151
|
|
|
/** |
|
152
|
|
|
* Remove registered field. |
|
153
|
|
|
* |
|
154
|
|
|
* @param array|string $abstract |
|
155
|
|
|
*/ |
|
156
|
|
|
public static function forget($abstract) |
|
157
|
|
|
{ |
|
158
|
|
|
Arr::forget(static::$availableFields, $abstract); |
|
159
|
|
|
} |
|
160
|
|
|
|
|
161
|
|
|
/** |
|
162
|
|
|
* Find field class. |
|
163
|
|
|
* |
|
164
|
|
|
* @param string $method |
|
165
|
|
|
* |
|
166
|
|
|
* @return bool|mixed |
|
167
|
|
|
*/ |
|
168
|
|
|
public static function findFieldClass($method) |
|
169
|
|
|
{ |
|
170
|
|
|
// If alias exists. |
|
171
|
|
|
if (isset(static::$fieldAlias[$method])) { |
|
172
|
|
|
$method = static::$fieldAlias[$method]; |
|
173
|
|
|
} |
|
174
|
|
|
|
|
175
|
|
|
$class = Arr::get(static::$availableFields, $method); |
|
176
|
|
|
|
|
177
|
|
|
if (class_exists($class)) { |
|
178
|
|
|
return $class; |
|
179
|
|
|
} |
|
180
|
|
|
|
|
181
|
|
|
return false; |
|
182
|
|
|
} |
|
183
|
|
|
|
|
184
|
|
|
/** |
|
185
|
|
|
* Collect assets required by registered field. |
|
186
|
|
|
* |
|
187
|
|
|
* @return array |
|
188
|
|
|
*/ |
|
189
|
|
|
public static function collectFieldAssets(): array |
|
190
|
|
|
{ |
|
191
|
|
|
if (!empty(static::$collectedAssets)) { |
|
192
|
|
|
return static::$collectedAssets; |
|
193
|
|
|
} |
|
194
|
|
|
|
|
195
|
|
|
$css = collect(); |
|
196
|
|
|
$js = collect(); |
|
197
|
|
|
|
|
198
|
|
|
foreach (static::$availableFields as $field) { |
|
199
|
|
|
if (!method_exists($field, 'getAssets')) { |
|
200
|
|
|
continue; |
|
201
|
|
|
} |
|
202
|
|
|
|
|
203
|
|
|
$assets = call_user_func([$field, 'getAssets']); |
|
204
|
|
|
|
|
205
|
|
|
$css->push(Arr::get($assets, 'css')); |
|
206
|
|
|
$js->push(Arr::get($assets, 'js')); |
|
207
|
|
|
} |
|
208
|
|
|
|
|
209
|
|
|
return static::$collectedAssets = [ |
|
210
|
|
|
'css' => $css->flatten()->unique()->filter()->toArray(), |
|
211
|
|
|
'js' => $js->flatten()->unique()->filter()->toArray(), |
|
212
|
|
|
]; |
|
213
|
|
|
} |
|
214
|
|
|
} |
|
215
|
|
|
|