-
-
Notifications
You must be signed in to change notification settings - Fork 15
/
Copy pathCreate.php
51 lines (40 loc) · 1.21 KB
/
Create.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<?php
declare(strict_types=1);
namespace App\Livewire\Discussions;
use App\Actions\Discussion\CreateDiscussionAction;
use App\Data\Discussion\CreateDiscussionData;
use App\Models\Tag;
use App\Traits\WithTagsAssociation;
use Illuminate\Contracts\View\View;
use Livewire\Attributes\On;
use Livewire\Attributes\Validate;
use Livewire\Component;
final class Create extends Component
{
use WithTagsAssociation;
#[Validate('required')]
public string $title = '';
#[Validate('required')]
public string $body = '';
#[On('markdown-x:update')]
public function onMarkdownUpdate(string $content): void
{
$this->body = $content;
}
public function store(): void
{
$this->validate();
$discussion = app(CreateDiscussionAction::class)->execute(CreateDiscussionData::from([
'title' => $this->title,
'body' => $this->body,
'tags' => $this->associateTags,
]));
$this->redirectRoute('discussions.show', $discussion, navigate: true);
}
public function render(): View
{
return view('livewire.discussions.create', [
'tags' => Tag::whereJsonContains('concerns', ['discussion'])->get(),
]);
}
}