88 lines
2.3 KiB
PHP
88 lines
2.3 KiB
PHP
<?php
|
|
|
|
namespace App\Livewire;
|
|
|
|
use App\Enums\ApprovalStatusEnum;
|
|
use App\Jobs\ArticleDiscoveryJob;
|
|
use App\Models\RouteArticle;
|
|
use Livewire\Component;
|
|
use Livewire\WithPagination;
|
|
|
|
class Articles extends Component
|
|
{
|
|
use WithPagination;
|
|
|
|
public string $tab = 'pending';
|
|
|
|
public string $search = '';
|
|
|
|
public bool $isRefreshing = false;
|
|
|
|
public function setTab(string $tab): void
|
|
{
|
|
$this->tab = $tab;
|
|
$this->search = '';
|
|
$this->resetPage();
|
|
}
|
|
|
|
public function updatedSearch(): void
|
|
{
|
|
$this->resetPage();
|
|
}
|
|
|
|
public function approve(int $routeArticleId): void
|
|
{
|
|
RouteArticle::findOrFail($routeArticleId)->approve();
|
|
}
|
|
|
|
public function reject(int $routeArticleId): void
|
|
{
|
|
RouteArticle::findOrFail($routeArticleId)->reject();
|
|
}
|
|
|
|
public function restore(int $routeArticleId): void
|
|
{
|
|
$routeArticle = RouteArticle::findOrFail($routeArticleId);
|
|
$routeArticle->update(['approval_status' => ApprovalStatusEnum::PENDING]);
|
|
}
|
|
|
|
public function clear(): void
|
|
{
|
|
RouteArticle::where('approval_status', ApprovalStatusEnum::PENDING)
|
|
->update(['approval_status' => ApprovalStatusEnum::REJECTED]);
|
|
}
|
|
|
|
public function refresh(): void
|
|
{
|
|
$this->isRefreshing = true;
|
|
|
|
ArticleDiscoveryJob::dispatch();
|
|
|
|
$this->dispatch('refresh-started');
|
|
}
|
|
|
|
public function render(): \Illuminate\Contracts\View\View
|
|
{
|
|
$query = RouteArticle::with(['article.feed', 'feed', 'platformChannel'])
|
|
->orderBy('created_at', 'desc');
|
|
|
|
if ($this->tab === 'pending') {
|
|
$query->where('approval_status', ApprovalStatusEnum::PENDING);
|
|
} elseif ($this->search !== '') {
|
|
$search = $this->search;
|
|
$query->whereHas('article', function ($q) use ($search) {
|
|
$q->where('title', 'like', "%{$search}%")
|
|
->orWhere('description', 'like', "%{$search}%");
|
|
});
|
|
}
|
|
|
|
$routeArticles = $query->paginate(15);
|
|
|
|
$pendingCount = RouteArticle::where('approval_status', ApprovalStatusEnum::PENDING)->count();
|
|
|
|
return view('livewire.articles', [
|
|
'routeArticles' => $routeArticles,
|
|
'pendingCount' => $pendingCount,
|
|
])->layout('layouts.app');
|
|
}
|
|
}
|