'Artikel', ])] class Index extends Component { use WithoutUrlPagination, WithPagination; public bool $isDetail = false; public ?string $search = null; public ?string $sort = null; public array $categories = []; public array $popularArticles = []; public function mount(): void { $this->categories = Category::query() ->where('type', CategoryType::ARTICLE) ->orderBy('sort_order') ->get() ->toArray(); $this->popularArticles = Article::published() ->with(['author', 'categories']) ->orderBy('views', 'desc') ->take(5) ->get() ->map(function ($article) { $article->thumbnail = $article->getFirstMediaUrl('thumbnail') ? $article->getFirstMediaUrl('thumbnail') : asset('assets/images/dark-logo.png'); return $article; }) ->toArray(); } #[Url(as: 'category')] public ?string $categorySlug = null; public function setCategory(?string $slug = null): void { $this->categorySlug = $slug; $this->resetPage(); } public function updatedSearch(): void { $this->resetPage(); } public function updateSort(): void { $this->resetPage(); } public function render(): View { $articles = Article::with(['author', 'categories']) ->published() ->when($this->search, function (Builder $query) { $query->where('title', 'like', '%'.$this->search.'%'); }) ->when($this->sort, function (Builder $query) { match ($this->sort) { 'latest' => $query->orderBy('created_at', 'desc'), 'Alphabetic' => $query->orderBy('title', 'asc'), 'views' => $query->orderBy('views', 'desc'), default => $query->latest(), }; }, fn ($query) => $query->latest()) ->when($this->categorySlug, function (Builder $query) { $query->whereHas('categories', function ($q) { $q->where('slug', $this->categorySlug); }); }) ->latest() ->paginate(9) ->through(function (Article $article) { $article->thumbnail = $article->getFirstMediaUrl('thumbnail') ? $article->getFirstMediaUrl('thumbnail') : asset('assets/images/dark-logo.png'); return $article; }); return view('livewire.home.article.index', [ 'pageTitle' => 'Artikel', 'pageDesc' => 'Baca tips profesional seputar wewangian, lifestyle, dan rekomendasi terbaik cuma buat kamu! 📖✨', 'articles' => $articles, ]); } }