forked from eatvio/eatvio-infra
93 lines
2.1 KiB
PHP
93 lines
2.1 KiB
PHP
<?php
|
|
|
|
namespace App\Livewire\Diet;
|
|
|
|
use Livewire\Component;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Livewire\WithFileUploads;
|
|
use App\Models\Diet;
|
|
|
|
class Create extends Component
|
|
{
|
|
use WithFileUploads;
|
|
|
|
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'];
|
|
|
|
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 render()
|
|
{
|
|
return view('livewire.diet.create');
|
|
}
|
|
|
|
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)
|
|
{
|
|
$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 = new 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);
|
|
}
|
|
}
|