File: //home/armgroup/libs/app/Http/Livewire/Admin/Option/Create.php
<?php
namespace App\Http\Livewire\Admin\Option;
use App\Http\Livewire\ConvertEmptyStringsToNull;
use App\Http\Livewire\General;
use App\Models\Option;
use Illuminate\Support\Facades\DB;
use Livewire\Component;
class Create extends Component
{
use ConvertEmptyStringsToNull, General;
public $name;
public $label;
public $sort_order;
public $type = 0;
public $values = [];
public function mount()
{
$this->addItem();
}
public function render()
{
return view('livewire.admin.option.create');
}
protected function rules()
{
return [
'name' => 'required|max:250|string',
'label' => 'nullable|max:250|string',
'sort_order' => 'nullable|integer|min:0|max:10000',
'type' => 'required|integer|min:0|max:'.(count(Option::TYPE_TRANSLATE) - 1),
'values.*.name' => 'required|max:250|string|distinct',
'values.*.color' => ['nullable', 'regex:/^(#(?:[0-9a-f]{2}){2,4}|#[0-9a-f]{3}|(?:rgba?|hsla?)\((?:\d+%?(?:deg|rad|grad|turn)?(?:,|\s)+){2,3}[\s\/]*[\d\.]+%?\))$/i'],
'values.*.sort_order' => 'nullable|integer|min:0|max:10000',
];
}
protected $validationAttributes = [
'values.*.name' => 'مقدار',
'values.*.color' => 'رنگ',
'values.*.sort_order' => 'ترتیپ',
];
public function addItem()
{
$this->values[] = [
'name' => null,
'color' => null,
'sort_order' => null,
];
}
public function removeItem($index)
{
unset($this->values[$index]);
}
public function store()
{
$this->validate();
DB::transaction(function () {
$option = Option::create([
'name' => $this->name,
'label' => $this->label,
'sort_order' => $this->sort_order,
'type' => $this->type,
]);
$option->values()->createMany($this->values);
saveActivity("گزینه {$this->name} ایجاد شد", $option);
});
$this->doneMessage();
return redirect()->route('admin.options.index');
}
}