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

110 lines
2.6 KiB
PHP

<?php
namespace App\Livewire\Diet;
use Livewire\Component;
use App\Models\Diet;
use Illuminate\Support\Facades\Auth;
class Edit extends Component
{
public Diet $diet;
public $name = "";
public $image = null;
public $duration = "7";
public $state = "draft";
public $type = [];
public $details = "";
public $days = [];
public $copyedDay = null;
public $copyedDayData = null;
protected $listeners = ['dayUpdated', 'makeCopy', 'makePaste'];
public function mount(Diet $diet)
{
$this->name = $diet->name;
$this->image = $diet->image;
$this->duration = $diet->duration;
$this->state = $diet->state;
$this->type = json_decode($diet->type, true);
$this->details = $diet->details;
$this->days = json_decode($diet->daily_schedule, true);
}
public function render()
{
return view('livewire.diet.edit');
}
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:meat,veg,corb,alko', 'min:1'],
'details' => 'required|min:3',
];
return $rules;
}
public function dayUpdated($dayIndex, $data)
{
$this->days[$dayIndex] = $data;
}
public function showPreview()
{
$this->state = "draft";
$this->publish();
}
public function addToDrafts()
{
$this->state = "draft";
$this->publish();
}
public function makeCopy($day)
{
/* dd($day); */
$this->copyedDay = $day;
}
public function makePaste($copyToDay)
{
$data = $this->days[$this->copyedDay];
$this->dispatch(
'takePaste',
day: $copyToDay,
data: $data
)->to('diet.day-edit');
}
public function publish()
{
$this->validate();
$diet = $this->diet;
$diet->name = $this->name;
/* $diet->image = $this->image->store('diets', 'public'); */
$diet->duration = $this->duration;
$diet->state = $this->state;
$diet->type = json_encode($this->type);
$diet->details = $this->details;
$diet->daily_schedule = json_encode($this->days);
$diet->save();
/* $user = Auth::user(); */
/* $user->author_of_diets()->attach($diet->id); */
return redirect()->route('diet.show', $diet->id);
}
}