akaunting 3.0 (the last dance)
This commit is contained in:
307
app/Abstracts/View/Components/Form.php
Normal file
307
app/Abstracts/View/Components/Form.php
Normal file
@ -0,0 +1,307 @@
|
||||
<?php
|
||||
|
||||
namespace App\Abstracts\View\Components;
|
||||
|
||||
use App\Abstracts\View\Component;
|
||||
use Illuminate\Support\Collection;
|
||||
|
||||
abstract class Form extends Component
|
||||
{
|
||||
/** @var string */
|
||||
public $type;
|
||||
|
||||
/** @var string */
|
||||
public $name;
|
||||
|
||||
/** @var string */
|
||||
public $label;
|
||||
|
||||
/** @var string */
|
||||
public $id;
|
||||
|
||||
public $value;
|
||||
|
||||
/** @var string */
|
||||
public $valueKey;
|
||||
|
||||
/** @var string */
|
||||
public $placeholder;
|
||||
|
||||
/** @var array */
|
||||
public $options;
|
||||
|
||||
/** @var array */
|
||||
public $option;
|
||||
|
||||
/** @var string */
|
||||
public $optionKey;
|
||||
|
||||
/** @var string */
|
||||
public $optionValue;
|
||||
|
||||
/** @var string */
|
||||
public $checked;
|
||||
|
||||
/** @var string */
|
||||
public $checkedKey;
|
||||
|
||||
/** @var string */
|
||||
public $selected;
|
||||
|
||||
/** @var string */
|
||||
public $selectedKey;
|
||||
|
||||
/** @var string */
|
||||
public $rows;
|
||||
|
||||
/** @var bool */
|
||||
public $remote;
|
||||
|
||||
/** @var bool */
|
||||
public $multiple;
|
||||
|
||||
/** @var bool */
|
||||
public $addNew;
|
||||
|
||||
/** @var bool */
|
||||
public $group;
|
||||
|
||||
/** @var bool */
|
||||
public $disabled;
|
||||
|
||||
/** @var bool */
|
||||
public $readonly;
|
||||
|
||||
/** @var bool */
|
||||
public $required;
|
||||
|
||||
/** @var bool */
|
||||
public $notRequired;
|
||||
|
||||
/** @var string */
|
||||
public $formGroupClass = 'sm:col-span-3';
|
||||
|
||||
/** @var string */
|
||||
public $inputGroupClass = '';
|
||||
|
||||
/** @var array */
|
||||
public $custom_attributes = [];
|
||||
|
||||
/** @var array */
|
||||
public $dynamicAttributes = [];
|
||||
|
||||
/**
|
||||
* Create a new component instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(
|
||||
string $name = '', string $type = 'text', string $label = '', string $id = null, $value = '', $valueKey = null, string $placeholder = '',
|
||||
$options = [], $option = [], string $optionKey = 'id', string $optionValue = 'name', $checked = null, $checkedKey = null, $selected = null, $selectedKey = null, $rows = '3',
|
||||
$remote = false, $multiple = false, $addNew = false, $group = false,
|
||||
bool $disabled = false, bool $readonly = false, bool $required = true, bool $notRequired = false,
|
||||
string $formGroupClass = '', string $inputGroupClass = '',
|
||||
$dynamicAttributes = '',
|
||||
) {
|
||||
$this->type = $this->getType($type);
|
||||
$this->name = $this->getName($name);
|
||||
$this->label = $label;
|
||||
$this->id = $id ?? $name;
|
||||
$this->value = $this->getValue($value, $valueKey);
|
||||
$this->placeholder = $this->getPlaceholder($placeholder);
|
||||
$this->rows = $rows;
|
||||
|
||||
$this->remote = $remote;
|
||||
$this->multiple = $multiple;
|
||||
$this->addNew = $addNew;
|
||||
$this->group = $group;
|
||||
|
||||
$this->disabled = $disabled;
|
||||
$this->readonly = $readonly;
|
||||
$this->required = $this->getRequired($required, $notRequired);
|
||||
|
||||
$this->options = $this->getOptions($options);
|
||||
$this->option = $option;
|
||||
$this->optionKey = $optionKey;
|
||||
$this->optionValue = $optionValue;
|
||||
$this->checked = $this->getChecked($checked, $checkedKey);
|
||||
$this->selected = $this->getSelected($selected, $selectedKey);
|
||||
|
||||
$this->formGroupClass = $this->getFromGroupClass($formGroupClass);
|
||||
$this->inputGroupClass = $this->getInputGroupClass($inputGroupClass);
|
||||
|
||||
$this->custom_attributes = $this->getCustomAttributes();
|
||||
|
||||
$this->setDynamicAttributes($dynamicAttributes);
|
||||
}
|
||||
|
||||
protected function getType($type)
|
||||
{
|
||||
if (! empty($type) && (! empty($this->type) && $type != 'text')) {
|
||||
return $type;
|
||||
}
|
||||
|
||||
if (! empty($this->type)) {
|
||||
return $this->type;
|
||||
}
|
||||
}
|
||||
|
||||
protected function getName($name)
|
||||
{
|
||||
if (! empty($name)) {
|
||||
return $name;
|
||||
}
|
||||
|
||||
return $this->name;
|
||||
}
|
||||
|
||||
protected function getValue($value, $valueKey)
|
||||
{
|
||||
if ($value != '') {
|
||||
return $value;
|
||||
}
|
||||
|
||||
if (empty($valueKey)) {
|
||||
$valueKey = $this->name;
|
||||
}
|
||||
|
||||
if (empty($valueKey)) {
|
||||
return '';
|
||||
}
|
||||
|
||||
// set model value.
|
||||
$model = $this->getParentData('model');
|
||||
|
||||
$value_keys = explode('.', $valueKey);
|
||||
|
||||
if (count($value_keys) > 1) {
|
||||
$valueKey = $value_keys[0];
|
||||
}
|
||||
|
||||
if (! empty($model->{$valueKey})) {
|
||||
$value = $model->{$valueKey};
|
||||
}
|
||||
|
||||
if ($model instanceof Collection) {
|
||||
$value = $model->get($valueKey);
|
||||
}
|
||||
|
||||
if (count($value_keys) > 1) {
|
||||
$value = $value[0]->{$value_keys[1]};
|
||||
}
|
||||
|
||||
if (empty($value) && request()->has($valueKey)) {
|
||||
$value = request()->get($valueKey);
|
||||
}
|
||||
|
||||
return old($valueKey, $value);
|
||||
}
|
||||
|
||||
protected function getPlaceholder($placeholder)
|
||||
{
|
||||
if (! empty($placeholder)) {
|
||||
return $placeholder;
|
||||
}
|
||||
|
||||
$label = $this->label;
|
||||
|
||||
if (! empty($this->label) && ! empty($this->label->contents)) {
|
||||
$label = $this->name;
|
||||
}
|
||||
|
||||
return trans('general.form.enter', ['field' => $label]);
|
||||
}
|
||||
|
||||
protected function getOptions($options)
|
||||
{
|
||||
if (! empty($options)) {
|
||||
if (is_array($options) && ! $this->group) {
|
||||
$o = collect();
|
||||
|
||||
foreach ($options as $key => $value) {
|
||||
if (is_array($value)) {
|
||||
$o->push((object) $value);
|
||||
} else {
|
||||
$o->push((object) [
|
||||
'id' => $key,
|
||||
'name' => $value,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
$options = $o;
|
||||
}
|
||||
|
||||
return $options;
|
||||
}
|
||||
|
||||
return [];
|
||||
}
|
||||
|
||||
protected function getChecked($checked, $checkedKey)
|
||||
{
|
||||
return $this->getValue($checked, $checkedKey);
|
||||
}
|
||||
|
||||
protected function getSelected($selected, $selectedKey)
|
||||
{
|
||||
return $this->getValue($selected, $selectedKey);
|
||||
}
|
||||
|
||||
protected function getRequired($required, $notRequired)
|
||||
{
|
||||
if (! empty($notRequired)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return $required;
|
||||
}
|
||||
|
||||
protected function getFromGroupClass($formGroupClass)
|
||||
{
|
||||
if (! empty($formGroupClass)) {
|
||||
return $formGroupClass;
|
||||
}
|
||||
|
||||
return $this->formGroupClass;
|
||||
}
|
||||
|
||||
protected function getInputGroupClass($inputGroupClass)
|
||||
{
|
||||
if (! empty($inputGroupClass)) {
|
||||
return $inputGroupClass;
|
||||
}
|
||||
|
||||
return $this->inputGroupClass;
|
||||
}
|
||||
|
||||
protected function getCustomAttributes()
|
||||
{
|
||||
$attributes = [];
|
||||
|
||||
if (! empty($this->required)) {
|
||||
$attributes['required'] = $this->required;
|
||||
}
|
||||
|
||||
if (! empty($this->disabled)) {
|
||||
$attributes['disabled'] = $this->disabled;
|
||||
}
|
||||
|
||||
if (! empty($this->readonly)) {
|
||||
$attributes['readonly'] = $this->readonly;
|
||||
}
|
||||
|
||||
foreach ($this->custom_attributes as $key => $value) {
|
||||
$attributes[$key] = $value;
|
||||
}
|
||||
|
||||
return $attributes;
|
||||
}
|
||||
|
||||
protected function setDynamicAttributes($dynamicAttributes)
|
||||
{
|
||||
if (! empty($dynamicAttributes)) {
|
||||
$this->dynamicAttributes = $dynamicAttributes;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user