2026-05-30 02:50:34 +03:00
|
|
|
|
@extends('layouts.app')
|
|
|
|
|
|
@php use Illuminate\Support\Str; @endphp
|
|
|
|
|
|
|
|
|
|
|
|
@section('title', $list->title . ' — GameLog')
|
|
|
|
|
|
|
|
|
|
|
|
@section('content')
|
|
|
|
|
|
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-10">
|
|
|
|
|
|
|
|
|
|
|
|
{{-- Header --}}
|
|
|
|
|
|
<div class="flex items-start justify-between mb-2">
|
|
|
|
|
|
<div>
|
|
|
|
|
|
<div class="flex items-center gap-2 mb-1">
|
2026-05-30 23:47:32 +03:00
|
|
|
|
<a href="{{ route('users.show', ['user' => $list->user->slug]) }}" class="text-sm text-slate-500 hover:text-slate-300 transition-colors">
|
|
|
|
|
|
{{ $list->user->slug ?? $list->user->name }}
|
2026-05-30 02:50:34 +03:00
|
|
|
|
</a>
|
|
|
|
|
|
@if(!$list->is_public)
|
|
|
|
|
|
<span class="text-xs text-slate-500 bg-[#16161d] px-2 py-0.5 rounded border border-white/10">Private</span>
|
|
|
|
|
|
@endif
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<h1 class="text-2xl font-bold text-white">{{ $list->title }}</h1>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
@auth
|
|
|
|
|
|
@if(auth()->id() === $list->user_id)
|
|
|
|
|
|
<form method="POST" action="{{ route('lists.destroy', $list) }}" onsubmit="return confirm('Delete this list and remove all its games?')">
|
|
|
|
|
|
@csrf @method('DELETE')
|
|
|
|
|
|
<button type="submit" class="text-sm text-red-400 hover:text-red-300 transition-colors">Delete List</button>
|
|
|
|
|
|
</form>
|
|
|
|
|
|
@endif
|
|
|
|
|
|
@endauth
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
@if($list->description)
|
|
|
|
|
|
<p class="text-slate-400 mb-8 max-w-2xl">{{ $list->description }}</p>
|
|
|
|
|
|
@else
|
|
|
|
|
|
<div class="mb-8"></div>
|
|
|
|
|
|
@endif
|
|
|
|
|
|
|
|
|
|
|
|
<p class="text-sm text-slate-500 mb-6">{{ $list->listGames->count() }} {{ Str::plural('game', $list->listGames->count()) }}</p>
|
|
|
|
|
|
|
|
|
|
|
|
@if($list->listGames->isEmpty())
|
|
|
|
|
|
<div class="text-center py-16">
|
|
|
|
|
|
<p class="text-slate-500">No games in this list yet.</p>
|
|
|
|
|
|
@auth
|
|
|
|
|
|
@if(auth()->id() === $list->user_id)
|
|
|
|
|
|
<p class="text-sm text-slate-600 mt-2">
|
|
|
|
|
|
Browse <a href="{{ route('games.index') }}" class="text-purple-400 hover:text-purple-300 transition-colors">games</a>
|
|
|
|
|
|
and use "Add to List" to add them here.
|
|
|
|
|
|
</p>
|
|
|
|
|
|
@endif
|
|
|
|
|
|
@endauth
|
|
|
|
|
|
</div>
|
|
|
|
|
|
@else
|
|
|
|
|
|
<div class="grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-6 gap-4">
|
|
|
|
|
|
@foreach($list->listGames as $entry)
|
|
|
|
|
|
<div class="group relative">
|
|
|
|
|
|
<x-game-card :game="$entry->game" />
|
|
|
|
|
|
@auth
|
|
|
|
|
|
@if(auth()->id() === $list->user_id)
|
2026-05-30 18:56:17 +03:00
|
|
|
|
<button onclick="removeGameFromList('{{ $list->slug }}', '{{ $entry->game->slug }}', this)"
|
2026-05-30 02:50:34 +03:00
|
|
|
|
class="absolute top-2 right-2 w-6 h-6 bg-red-600 hover:bg-red-700 text-white rounded-full text-xs font-bold opacity-0 group-hover:opacity-100 transition-opacity flex items-center justify-center leading-none">
|
|
|
|
|
|
×
|
|
|
|
|
|
</button>
|
|
|
|
|
|
@endif
|
|
|
|
|
|
@endauth
|
|
|
|
|
|
</div>
|
|
|
|
|
|
@endforeach
|
|
|
|
|
|
</div>
|
|
|
|
|
|
@endif
|
|
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
@push('scripts')
|
|
|
|
|
|
<script>
|
2026-05-30 18:56:17 +03:00
|
|
|
|
function removeGameFromList(listSlug, gameSlug, btn) {
|
2026-05-30 02:50:34 +03:00
|
|
|
|
if (!confirm('Remove from list?')) return;
|
2026-05-30 18:56:17 +03:00
|
|
|
|
fetch(`/lists/${listSlug}/games/${gameSlug}`, {
|
2026-05-30 02:50:34 +03:00
|
|
|
|
method: 'DELETE',
|
|
|
|
|
|
headers: {
|
|
|
|
|
|
'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content,
|
|
|
|
|
|
'Accept': 'application/json',
|
|
|
|
|
|
},
|
|
|
|
|
|
}).then(r => {
|
|
|
|
|
|
if (r.ok) btn.closest('.group').remove();
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
</script>
|
|
|
|
|
|
@endpush
|
|
|
|
|
|
@endsection
|