diff --git a/resources/views/livewire/association/news.blade.php b/resources/views/livewire/association/news.blade.php index f30df3d..5ce2927 100644 --- a/resources/views/livewire/association/news.blade.php +++ b/resources/views/livewire/association/news.blade.php @@ -4,8 +4,10 @@ use App\Enums\NewsCategory; use App\Models\Notification; use App\Support\NostrAuth; use Illuminate\Support\Collection; +use Livewire\Attributes\Computed; use Livewire\Attributes\Layout; use Livewire\Attributes\Title; +use Livewire\Attributes\Url; use Livewire\Component; use Livewire\WithFileUploads; @@ -17,6 +19,9 @@ class extends Component { public Collection|array $news = []; + #[Url(as: 'kategorie')] + public ?int $selectedCategory = null; + public array $form = [ 'category' => '', 'name' => '', @@ -49,13 +54,40 @@ class extends Component { $this->canEdit = true; } - $this->news = \App\Models\Notification::query() - ->with(['einundzwanzigPleb.profile']) - ->latest() - ->get(); + $this->loadNews(); } } + #[Computed] + public function filteredNews(): Collection|array + { + if ($this->selectedCategory === null) { + return $this->news; + } + + return collect($this->news)->filter( + fn ($item) => $item->category->value === $this->selectedCategory + ); + } + + public function filterByCategory(?int $category): void + { + $this->selectedCategory = $this->selectedCategory === $category ? null : $category; + } + + public function clearFilter(): void + { + $this->selectedCategory = null; + } + + private function loadNews(): void + { + $this->news = Notification::query() + ->with(['einundzwanzigPleb.profile']) + ->latest() + ->get(); + } + public function save(): void { $this->validate([ @@ -81,11 +113,7 @@ class extends Component { } $this->reset(['form', 'file']); - - $this->news = \App\Models\Notification::query() - ->with(['einundzwanzigPleb.profile']) - ->latest() - ->get(); + $this->loadNews(); } public function confirmDelete(int $id): void @@ -97,11 +125,7 @@ class extends Component { { $news = Notification::query()->findOrFail($this->confirmDeleteId); $news->delete(); - - $this->news = \App\Models\Notification::query() - ->with(['einundzwanzigPleb.profile']) - ->latest() - ->get(); + $this->loadNews(); } public function removeFile(): void @@ -143,17 +167,38 @@ class extends Component {
Keine News vorhanden.
+ @if($selectedCategory !== null) +Keine News in dieser Kategorie vorhanden.
+Keine News vorhanden.
+ @endif