feat: icon list + search functionality

This commit is contained in:
Rico van Zelst
2023-11-15 13:58:12 +01:00
parent cc2ebc8899
commit cea55e776c
25 changed files with 402 additions and 41 deletions

View File

@@ -0,0 +1,70 @@
<?php
namespace App\Http\Controllers;
use App\Models\SummonerIcon;
use Illuminate\Http\Request;
use Spatie\QueryBuilder\AllowedFilter;
use Spatie\QueryBuilder\QueryBuilder;
class SummonerIconController extends Controller
{
public function index()
{
$icons = QueryBuilder::for(SummonerIcon::class)
->allowedFilters('title')
->defaultSort('icon_id')
->paginate(72)
->appends(request()->query());
return view('icons.index', compact('icons'));
}
public function store(Request $request)
{
$request->validate([
'icon_id' => ['required', 'integer'],
'title' => ['nullable'],
'release_year' => ['nullable', 'integer'],
'legacy' => ['required'],
'image' => ['required'],
'esports_team' => ['nullable'],
'esports_region' => ['nullable'],
'esports_event' => ['nullable'],
'description' => ['nullable'],
]);
return SummonerIcon::create($request->validated());
}
public function show(SummonerIcon $summonerIcon)
{
return $summonerIcon;
}
public function update(Request $request, SummonerIcon $summonerIcon)
{
$request->validate([
'icon_id' => ['required', 'integer'],
'title' => ['nullable'],
'release_year' => ['nullable', 'integer'],
'legacy' => ['required'],
'image' => ['required'],
'esports_team' => ['nullable'],
'esports_region' => ['nullable'],
'esports_event' => ['nullable'],
'description' => ['nullable'],
]);
$summonerIcon->update($request->validated());
return $summonerIcon;
}
public function destroy(SummonerIcon $summonerIcon)
{
$summonerIcon->delete();
return response()->json();
}
}

View File

@@ -0,0 +1,37 @@
<?php
namespace App\Models;
use Cviebrock\EloquentSluggable\Sluggable;
use Illuminate\Database\Eloquent\Model;
class SummonerIcon extends Model
{
use Sluggable;
protected $fillable = [
'icon_id',
'title',
'description',
'release_year',
'legacy',
'image',
'esports_team',
'esports_region',
'esports_event',
];
protected $casts = [
'legacy' => 'boolean',
];
public function sluggable(): array
{
return [
'slug' => [
'source' => ['title', 'icon_id'],
],
];
}
}

View File

@@ -0,0 +1,20 @@
<?php
namespace App\View\Components\Icons;
use App\Models\SummonerIcon;
use Illuminate\Contracts\View\View;
use Illuminate\View\Component;
class List_all extends Component
{
public function __construct(public SummonerIcon $icons)
{
}
public function render(): View
{
return view('components.icons.list_all');
}
}