name = $blogPost->name; $this->image = $blogPost->image; $this->state = $blogPost->state; $this->title = $blogPost->title; $this->description = $blogPost->description; $this->tags = $blogPost->tags; $this->videoUrl = $blogPost->youtube_url; } public function parentComponentTagAdded(Tag $tag): void { $tagIndex = $tag->id; $this->tags[$tagIndex] = $tag; } public function parentComponentTagRemoved(Tag $tag): void { $tagToDetach = Tag::where('name', $tag)->first(); $this->tags = collect($this->tags) ->filter(fn ($curTag) => $curTag['name'] !== $tag) ->all(); $this->blogPost->tags()->detach($tagToDetach->id); } public function draft(): void { $this->state = 'archived'; $this->publish(); } public function preview(): void { $this->state = 'archived'; $this->publish(); } public function publish(): void { $this->validate(); $post = $this->blogPost; $post->image = ! is_string($this->image) ? $this->image->store('blog_posts') : $this->image; $post->state = $this->state; $post->title = $this->title; $post->description = $this->description; $post->youtube_url = $this->videoUrl; $post->save(); $tagsIds = collect($this->tags) ->map(fn ($curTag) => $curTag['id']); $post ->tags() ->attach($tagsIds); $user = Auth::user(); $user->author_of_blog_post()->attach($post->id); $this->redirectRoute('blog_post.show', $post); } public function render(): View { return view('livewire.blog-post.edit'); } protected function getListeners(): array { return ['blogPostTagAdded', 'blogPostTagRemoved']; } protected function rules(): array { return [ /* 'image' => 'required|image|max:2048', */ 'state' => 'required|in:active,archived', 'description' => 'required|min:3', 'videoUrl' => 'nullable|url|max:2048', ]; } }