ldc-groupe/app/View/Components/Front/News/NewsNextEventComponent.php

53 lines
1.5 KiB
PHP

<?php
namespace App\View\Components\Front\News;
use Closure;
use App\Models\News;
use App\Models\NewsTag;
use App\Models\NewsCategory;
use Illuminate\View\Component;
use App\Enums\News\NewsStatusEnum;
use Illuminate\Contracts\View\View;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Cache;
class NewsNextEventComponent extends Component
{
public $nextEvents;
/**
* Create a new component instance.
*/
public function __construct()
{
$newsCategory = NewsCategory::getModelsCached()
->filter(fn($category) => $category->getTranslation('slug', 'fr') === "actualites")
->first();
$eventTag = NewsTag::getTagsByCategoryInCurrentLocale($newsCategory->slug)
->filter(fn($tag) => $tag->getTranslation('slug', 'fr') === "evenement")
->first();
$eventTagId = $eventTag ? $eventTag->id : null;
$this->nextEvents = News::getPublishedNewsByCategoryInCurrentLocale($newsCategory->slug)
->filter(function ($news) use ($eventTagId) {
return $news->tags->contains(
fn ($tag) => $eventTagId === $tag->id
);
})
->sortByDesc('published_at')
->take(3);
}
/**
* Get the view / contents that represent the component.
*/
public function render(): View|Closure|string
{
return view('components.front.news.news-next-event-component', [
'nextEvents' => $this->nextEvents
]);
}
}