diff --git a/app/Http/Controllers/ModController.php b/app/Http/Controllers/ModController.php
index 2091d97..86b89ee 100644
--- a/app/Http/Controllers/ModController.php
+++ b/app/Http/Controllers/ModController.php
@@ -15,7 +15,7 @@ class ModController extends Controller
{
$this->authorize('viewAny', Mod::class);
- return ModResource::collection(Mod::all());
+ return view('mod.index');
}
public function store(ModRequest $request)
diff --git a/app/Livewire/ModIndex.php b/app/Livewire/ModIndex.php
new file mode 100644
index 0000000..a00370f
--- /dev/null
+++ b/app/Livewire/ModIndex.php
@@ -0,0 +1,71 @@
+sectionFilter) {
+ case 'new':
+ $section = 'created_at';
+ break;
+ case 'most_downloaded':
+ $section = 'total_downloads';
+ break;
+ case 'recently_updated':
+ $section = 'updated_at';
+ break;
+ case 'top_rated':
+ // probably use some kind of 'likes' or something
+ // not implemented yet afaik -waffle
+ break;
+ }
+
+ $mods = Mod::select(['id', 'name', 'slug', 'teaser', 'thumbnail', 'featured', 'created_at'])
+ ->withTotalDownloads()
+ ->with(['users:id,name'])
+ ->where('name', 'like', '%'.Str::trim($this->modSearch).'%');
+
+ if ($this->versionFilter === -1) {
+ $mods = $mods
+ ->with(['latestVersion', 'latestVersion.sptVersion'])
+ ->whereHas('latestVersion.sptVersion');
+ } else {
+ $mods = $mods->with(['latestVersion' => function ($query) {
+ $query->where('spt_version_id', $this->versionFilter);
+ }, 'latestVersion.sptVersion'])
+ ->whereHas('latestVersion.sptVersion', function ($query) {
+ $query->where('spt_version_id', $this->versionFilter);
+ });
+ }
+
+ $mods = $mods->orderByDesc($section)->paginate(12);
+
+ $sptVersions = SptVersion::select(['id', 'version', 'color_class'])->orderByDesc('version')->get();
+
+ return view('livewire.mod-index', ['mods' => $mods, 'sptVersions' => $sptVersions]);
+ }
+
+ public function changeSection($section): void
+ {
+ $this->sectionFilter = $section;
+ }
+}
diff --git a/app/Policies/ModPolicy.php b/app/Policies/ModPolicy.php
index 7c4e3ec..b5e9873 100644
--- a/app/Policies/ModPolicy.php
+++ b/app/Policies/ModPolicy.php
@@ -10,9 +10,9 @@ class ModPolicy
/**
* Determine whether the user can view multiple models.
*/
- public function viewAny(User $user): bool
+ public function viewAny(?User $user): bool
{
- return false;
+ return true;
}
/**
diff --git a/resources/views/components/mod-card.blade.php b/resources/views/components/mod-card.blade.php
new file mode 100644
index 0000000..7f4e767
--- /dev/null
+++ b/resources/views/components/mod-card.blade.php
@@ -0,0 +1,31 @@
+@props(['mod', 'versionScope' => 'latestVersion'])
+
+
+
+ By {{ $mod->users->pluck('name')->implode(', ') }}
+ {{ Str::limit($mod->teaser, 100) }}
+
+ @else
+
+ @endif
+
{{ $mod->name }}
+
+ {{ $mod->{$versionScope}->sptVersion->version }}
+
+
- By {{ $mod->users->pluck('name')->implode(', ') }} -
-{{ Str::limit($mod->teaser, 100) }}
-tags filters here when ready :)
+