Files
UNIT3D-Community-Edition/app/Http/Livewire/MissingMediaSearch.php
2024-03-03 22:41:29 -05:00

56 lines
1.5 KiB
PHP

<?php
namespace App\Http\Livewire;
use App\Models\Movie;
use App\Models\Type;
use App\Traits\LivewireSort;
use Livewire\Attributes\Computed;
use Livewire\Attributes\Url;
use Livewire\Component;
use Livewire\WithPagination;
class MissingMediaSearch extends Component
{
use LivewireSort;
use WithPagination;
#[Url]
public array $categories = [];
#[Url]
public string $sortField = 'created_at';
#[Url]
public string $sortDirection = 'desc';
#[Url]
public int $perPage = 50;
/**
* @return \Illuminate\Contracts\Pagination\LengthAwarePaginator<Movie>
*/
#[Computed]
final public function medias(): \Illuminate\Contracts\Pagination\LengthAwarePaginator
{
return Movie::with(['torrents:tmdb,resolution_id,type_id' => ['resolution:id,position,name']])
->withCount(['requests' => fn ($query) => $query->whereNull('torrent_id')->whereNull('claimed')])
->orderBy($this->sortField, $this->sortDirection)
->paginate($this->perPage);
}
/**
* @return \Illuminate\Database\Eloquent\Collection<int, Type>
*/
#[Computed]
final public function types(): \Illuminate\Database\Eloquent\Collection
{
return Type::select('id', 'position', 'name')->orderBy('position')->get();
}
final public function render(): \Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Contracts\Foundation\Application
{
return view('livewire.missing-media-search', ['medias' => $this->medias, 'types' => $this->types]);
}
}