fedi-feed-router/app/Livewire/Activity.php

63 lines
1.6 KiB
PHP
Raw Normal View History

2026-08-10 20:45:52 +02:00
<?php
namespace App\Livewire;
use App\Enums\ActivityTypeEnum;
use App\Models\ActivityLog;
use App\Models\Article;
2026-08-10 20:45:52 +02:00
use App\Services\Activity\ActivitySummary;
use Illuminate\Contracts\View\View;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Relations\MorphTo;
use Illuminate\Database\Eloquent\Relations\Relation;
2026-08-10 20:45:52 +02:00
use Livewire\Component;
use Livewire\WithPagination;
class Activity extends Component
{
use WithPagination;
public string $type = '';
public int $days = 7;
public function updatedType(): void
{
$this->resetPage();
}
public function updatedDays(): void
{
$this->resetPage();
}
/**
* @return Builder<ActivityLog>
*/
private function query(): Builder
{
return ActivityLog::query()
->with(['subject' => function (Relation $morphTo): void {
if ($morphTo instanceof MorphTo) {
$morphTo->morphWith([Article::class => ['feed']]);
}
}])
2026-08-10 20:45:52 +02:00
->since(now()->subDays($this->days))
->when(
$this->type !== '',
fn (Builder $q) => $q->where('type', $this->type),
)
->latestFirst();
}
public function render(ActivitySummary $summary): View
{
return view('livewire.activity', [
'entries' => $this->query()->paginate(25),
'typeOptions' => ActivityTypeEnum::options(),
'summaryDay' => $summary->since(now()->subDay()),
'summaryWeek' => $summary->since(now()->subWeek()),
])->layout('layouts.app');
}
}