diff --git a/app/Http/Livewire/Form/CardForm.php b/app/Http/Livewire/Form/CardForm.php new file mode 100644 index 0000000..535cbcd --- /dev/null +++ b/app/Http/Livewire/Form/CardForm.php @@ -0,0 +1,104 @@ +card = $card; + $this->characters = Character::all()->pluck('name', 'id'); + $this->raids = Raid::all()->pluck('name', 'id'); + $this->classes = Wow::$classes; + $this->exist = $card->exists; + } + + /** + * Validation rules + */ + protected function rules() + { + return [ + 'card.body' => 'required|string|min:3|max:200', + 'card.character_id' => 'exists:' . Character::class . ',id|nullable', + 'card.raid_id' => 'exists:' . Raid::class . ',id|nullable', + 'card.class' => 'in:' . collect($this->classes)->keys() . '|nullable', + ]; + } + + public function updated($property, $value) + { + // Hack to force empty value to null. + if (in_array($property, ['card.character_id', 'card.raid_id', 'card.class'])) { + if (empty($value)) { + $this->{$property} = null; + } + } + + $this->validateOnly($property); + } + + /** + * Returns true if this card has not been stored in the database. + */ + public function isNew() : bool + { + return !$this->exist; + } + + /** + * Submit the form, create/update card. + */ + public function submit() + { + $this->validate(); + $this->card->save(); + + if ($this->isNew()) { + session()->flash('info', 'Card was successfully created.'); + return redirect()->route('admin.card.index'); + } + + $this->info('Card was successfully updated.'); + } + + /** + * Render the setup page + */ + public function render() + { + return view('form.card') + ->layout('layouts.admin'); + } +} diff --git a/resources/views/form/card.blade.php b/resources/views/form/card.blade.php new file mode 100644 index 0000000..f1ade82 --- /dev/null +++ b/resources/views/form/card.blade.php @@ -0,0 +1,32 @@ + +
+ + {{ __(($this->isNew() ? 'Create' : 'Edit') . ' card') }} + +
+ +
+ {{ __('Body') }} + +
+ +
+
+ {{ __('Raid') }} + +
+
+ {{ __('Character') }} + +
+
+ {{ __('Class') }} + +
+
+ + {{ __('Save') }} + {{ __('Back') }} +
+ +