Files
eatvio-infra/app/Livewire/Plan/Create.php
2023-10-04 17:57:09 +03:00

110 lines
3.5 KiB
PHP

<?php
namespace App\Livewire\Plan;
use Illuminate\Support\Facades\Auth;
use Livewire\WithFileUploads;
use Livewire\Component;
/* use Tonysm\RichTextLaravel\Livewire\WithRichTexts; */
use App\Models\Plan;
class Create extends Component
{
use WithFileUploads;
public $name = "";
public $image = null;
public $duration = "7";
public $state = "draft";
public $type = [];
public $details = "";
public $packets_count = 1;
public $packet1_options = [];
public $packet2_options = [];
public $packet3_options = [];
public $packet1_options_input = [];
public $packet2_options_input = [];
public $packet3_options_input = [];
public $input_items = "";
protected function rules()
{
$rules = [
'name' => 'required|min:3',
'image' => 'required|image|max:2048',
'duration' => 'required|numeric|min:7',
'state' => 'required|in:draft,active,inactive',
'type' => ['required', 'array:slim,fit,wellness,behavior', 'min:1'],
'details' => 'required|min:3',
'packets_count' => 'required|in:1,3',
'packet1_options.short' => 'required|string|min:3',
'packet1_options.price' => 'required|numeric|min:1',
'packet1_options.description' => 'required|string|min:3',
'packet1_options.items' => 'required|array|min:1',
];
if($this->packets_count === 3) {
$rules['packet2_options.short'] = 'required|string|min:3';
$rules['packet2_options.price'] = 'required|numeric|min:1';
$rules['packet2_options.description'] = 'required|string|min:3';
$rules['packet2_options.items'] = 'required|array|min:1';
$rules['packet3_options.short'] = 'required|string|min:3';
$rules['packet3_options.price'] = 'required|numeric|min:1';
$rules['packet3_options.description'] = 'required|string|min:3';
$rules['packet3_options.items'] = 'required|array|min:1';
}
return $rules;
}
public function render()
{
return view('livewire.plan.create');
}
public function addPacketOption($options_type, $options_type_input)
{
$this->$options_type['short'] = $this->$options_type_input['short'];
$this->$options_type['price'] = $this->$options_type_input['price'];
$this->$options_type['description'] = $this->$options_type_input['description'];
$this->$options_type['items'][] = $this->input_items;
$this->reset('input_items');
}
public function publish()
{
/* dd($this->type); */
$this->validate();
$plan = new Plan();
$plan->name = $this->name;
$plan->image = $this->image->store('plans', 'public');
$plan->duration = $this->duration;
$plan->state = $this->state;
$plan->type = json_encode($this->type);
$plan->details = $this->details;
$plan->packets_count = $this->packets_count;
$plan->packet1_options = json_encode($this->packet1_options);
$plan->packet2_options = json_encode($this->packet2_options);
$plan->packet3_options = json_encode($this->packet3_options);
$plan->save();
$user = Auth::user();
$user->author_of_plans()->attach($plan->id);
return redirect()->route('plan.show', $plan->id);
}
public function addToDrafts()
{
$this->type = "draft";
$this->publish();
}
public function showPreview()
{
$this->type = "inactive";
$this->publish();
}
}