From 54fd2ede536ecba19b5ba7b4e075e748c09dbbdd Mon Sep 17 00:00:00 2001 From: Refringe Date: Fri, 17 May 2024 23:54:03 -0400 Subject: [PATCH] Worked on homepage mod components --- app/Helpers/ColorHelper.php | 17 +++++ app/Models/Mod.php | 9 ++- app/Models/ModVersion.php | 10 ++- app/Providers/AppServiceProvider.php | 1 + app/View/Components/LatestModListing.php | 17 ----- app/View/Components/ModList.php | 32 +++++++++ app/View/Components/ModListSection.php | 65 +++++++++++++++++++ app/View/Components/ModVersionTag.php | 31 +++++++++ composer.json | 5 +- composer.lock | 22 +++---- database/factories/ModFactory.php | 1 + .../2024_05_15_022710_create_mods_table.php | 1 + package-lock.json | 32 ++++----- .../components/latest-mod-listing.blade.php | 48 -------------- .../mod-list-section-partial.blade.php | 6 ++ .../components/mod-list-section.blade.php | 7 ++ resources/views/components/mod-list.blade.php | 40 ++++++++++++ .../components/page-content-title.blade.php | 12 ++++ resources/views/home.blade.php | 6 +- resources/views/layouts/app.blade.php | 1 + resources/views/navigation-menu.blade.php | 2 +- routes/web.php | 6 +- 22 files changed, 270 insertions(+), 101 deletions(-) create mode 100644 app/Helpers/ColorHelper.php delete mode 100644 app/View/Components/LatestModListing.php create mode 100644 app/View/Components/ModList.php create mode 100644 app/View/Components/ModListSection.php create mode 100644 app/View/Components/ModVersionTag.php delete mode 100644 resources/views/components/latest-mod-listing.blade.php create mode 100644 resources/views/components/mod-list-section-partial.blade.php create mode 100644 resources/views/components/mod-list-section.blade.php create mode 100644 resources/views/components/mod-list.blade.php create mode 100644 resources/views/components/page-content-title.blade.php diff --git a/app/Helpers/ColorHelper.php b/app/Helpers/ColorHelper.php new file mode 100644 index 0000000..8627997 --- /dev/null +++ b/app/Helpers/ColorHelper.php @@ -0,0 +1,17 @@ + 'bg-red-50 text-red-700 ring-red-600/20', + 'green' => 'bg-green-50 text-green-700 ring-green-600/20', + 'yellow' => 'bg-yellow-50 text-yellow-700 ring-yellow-600/20', + default => 'bg-gray-50 text-gray-700 ring-gray-600/20', + }; + } +} diff --git a/app/Models/Mod.php b/app/Models/Mod.php index 3ba9e6d..727f327 100644 --- a/app/Models/Mod.php +++ b/app/Models/Mod.php @@ -38,9 +38,14 @@ class Mod extends Model return $this->hasMany(ModVersion::class); } - public function versionWithHighestSptVersion() + public function versionLastUpdated() { - return $this->hasOne(ModVersion::class)->highestSptVersion(); + return $this->hasOne(ModVersion::class)->lastUpdated(); + } + + public function versionLatestSptVersion() + { + return $this->hasOne(ModVersion::class)->latestSptVersion(); } protected function slug(): Attribute diff --git a/app/Models/ModVersion.php b/app/Models/ModVersion.php index 304b8d9..4ee7ac1 100644 --- a/app/Models/ModVersion.php +++ b/app/Models/ModVersion.php @@ -2,6 +2,7 @@ namespace App\Models; +use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; @@ -30,9 +31,14 @@ class ModVersion extends Model return $this->belongsTo(SptVersion::class); } - public function scopeHighestSptVersion($query) + public function scopeLastUpdated(Builder $query): void { - return $query->orderByDesc( + $query->orderByDesc('created_at'); + } + + public function scopeLatestSptVersion(Builder $query): void + { + $query->orderByDesc( SptVersion::select('spt_versions.version')->whereColumn('mod_versions.spt_version_id', 'spt_versions.id') )->orderByDesc('mod_versions.version'); } diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 452e6b6..79d93bb 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -2,6 +2,7 @@ namespace App\Providers; +use Illuminate\Support\Facades\Blade; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider diff --git a/app/View/Components/LatestModListing.php b/app/View/Components/LatestModListing.php deleted file mode 100644 index 292a495..0000000 --- a/app/View/Components/LatestModListing.php +++ /dev/null @@ -1,17 +0,0 @@ - Mod::with('versionWithHighestSptVersion.sptVersion')->latest()->take(6)->get(), - ]); - } -} diff --git a/app/View/Components/ModList.php b/app/View/Components/ModList.php new file mode 100644 index 0000000..de64e32 --- /dev/null +++ b/app/View/Components/ModList.php @@ -0,0 +1,32 @@ +mods = $mods; + $this->versionScope = $versionScope; + + foreach ($this->mods as $mod) { + $color = $mod->{$this->versionScope}->sptVersion->color_class; + $mod->colorClass = ColorHelper::tagColorClasses($color); + } + } + + public function render(): View + { + return view('components.mod-list', [ + 'mods' => $this->mods, + 'versionScope' => $this->versionScope, + ]); + } +} diff --git a/app/View/Components/ModListSection.php b/app/View/Components/ModListSection.php new file mode 100644 index 0000000..fb614d7 --- /dev/null +++ b/app/View/Components/ModListSection.php @@ -0,0 +1,65 @@ +modsSuggested = $this->fetchSuggestedMods(); + $this->modsLatest = $this->fetchLatestMods(); + $this->modsUpdated = $this->fetchUpdatedMods(); + } + + private function fetchSuggestedMods(): Collection + { + return Mod::with('versionLatestSptVersion.sptVersion')->whereSuggested(true)->take(6)->get(); + } + + private function fetchLatestMods(): Collection + { + return Mod::with('versionLatestSptVersion.sptVersion')->latest()->take(6)->get(); + } + + private function fetchUpdatedMods(): Collection + { + return Mod::with('versionLastUpdated.sptVersion')->take(6)->get(); + } + + public function getSections(): array + { + return [ + [ + 'title' => 'Suggested Mods', + 'mods' => $this->modsSuggested, + 'versionScope' => 'versionLatestSptVersion' + ], + [ + 'title' => 'Latest Mods', + 'mods' => $this->modsLatest, + 'versionScope' => 'versionLatestSptVersion' + ], + [ + 'title' => 'Recently Updated Mods', + 'mods' => $this->modsUpdated, + 'versionScope' => 'versionLastUpdated' + ], + ]; + } + + public function render(): View + { + return view('components.mod-list-section', [ + 'sections' => $this->getSections(), + ]); + } +} diff --git a/app/View/Components/ModVersionTag.php b/app/View/Components/ModVersionTag.php new file mode 100644 index 0000000..69947e4 --- /dev/null +++ b/app/View/Components/ModVersionTag.php @@ -0,0 +1,31 @@ +tagColor = $tagColor; + } + + public function render(): View + { + return view('components.mod-version-tag'); + } + + public function tagClasses($tagColor): string + { + return match ($this->tagColor) { + 'red' => 'bg-red-50 text-red-700 ring-red-600/20', + 'green' => 'bg-green-50 text-green-700 ring-green-600/20', + 'yellow' => 'bg-yellow-50 text-yellow-700 ring-yellow-600/20', + default => 'bg-gray-50 text-gray-700 ring-gray-600/20', + }; + } +} diff --git a/composer.json b/composer.json index 86fd501..b9ae0d0 100644 --- a/composer.json +++ b/composer.json @@ -29,7 +29,10 @@ "App\\": "app/", "Database\\Factories\\": "database/factories/", "Database\\Seeders\\": "database/seeders/" - } + }, + "files": [ + "app/helpers.php" + ] }, "autoload-dev": { "psr-4": { diff --git a/composer.lock b/composer.lock index 3d37332..642229e 100644 --- a/composer.lock +++ b/composer.lock @@ -1424,16 +1424,16 @@ }, { "name": "inertiajs/inertia-laravel", - "version": "v1.0.0", + "version": "v1.1.0", "source": { "type": "git", "url": "https://github.com/inertiajs/inertia-laravel.git", - "reference": "fcf3d6db1a259a55d8d18cf43fc971202c1f6b0d" + "reference": "576fba4da6f2ba6348ddf57a750c73231904d598" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/inertiajs/inertia-laravel/zipball/fcf3d6db1a259a55d8d18cf43fc971202c1f6b0d", - "reference": "fcf3d6db1a259a55d8d18cf43fc971202c1f6b0d", + "url": "https://api.github.com/repos/inertiajs/inertia-laravel/zipball/576fba4da6f2ba6348ddf57a750c73231904d598", + "reference": "576fba4da6f2ba6348ddf57a750c73231904d598", "shasum": "" }, "require": { @@ -1487,7 +1487,7 @@ ], "support": { "issues": "https://github.com/inertiajs/inertia-laravel/issues", - "source": "https://github.com/inertiajs/inertia-laravel/tree/v1.0.0" + "source": "https://github.com/inertiajs/inertia-laravel/tree/v1.1.0" }, "funding": [ { @@ -1495,7 +1495,7 @@ "type": "github" } ], - "time": "2024-03-09T00:30:58+00:00" + "time": "2024-05-16T01:41:06+00:00" }, { "name": "laravel/fortify", @@ -7675,16 +7675,16 @@ }, { "name": "mockery/mockery", - "version": "1.6.11", + "version": "1.6.12", "source": { "type": "git", "url": "https://github.com/mockery/mockery.git", - "reference": "81a161d0b135df89951abd52296adf97deb0723d" + "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/81a161d0b135df89951abd52296adf97deb0723d", - "reference": "81a161d0b135df89951abd52296adf97deb0723d", + "url": "https://api.github.com/repos/mockery/mockery/zipball/1f4efdd7d3beafe9807b08156dfcb176d18f1699", + "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699", "shasum": "" }, "require": { @@ -7754,7 +7754,7 @@ "security": "https://github.com/mockery/mockery/security/advisories", "source": "https://github.com/mockery/mockery" }, - "time": "2024-03-21T18:34:15+00:00" + "time": "2024-05-16T03:13:13+00:00" }, { "name": "myclabs/deep-copy", diff --git a/database/factories/ModFactory.php b/database/factories/ModFactory.php index 61a6e3d..3322487 100644 --- a/database/factories/ModFactory.php +++ b/database/factories/ModFactory.php @@ -23,6 +23,7 @@ class ModFactory extends Factory 'description' => $this->faker->paragraph, 'license_id' => License::factory(), 'source_code_link' => $this->faker->url(), + 'suggested' => $this->faker->boolean, 'contains_ai_content' => $this->faker->boolean, 'created_at' => now(), 'updated_at' => now(), diff --git a/database/migrations/2024_05_15_022710_create_mods_table.php b/database/migrations/2024_05_15_022710_create_mods_table.php index 002574d..66a21f5 100644 --- a/database/migrations/2024_05_15_022710_create_mods_table.php +++ b/database/migrations/2024_05_15_022710_create_mods_table.php @@ -18,6 +18,7 @@ return new class extends Migration $table->longText('description'); $table->foreignIdFor(License::class)->constrained('licenses'); $table->string('source_code_link'); + $table->boolean('suggested')->default(false); $table->boolean('contains_ai_content')->default(false); $table->softDeletes(); $table->timestamps(); diff --git a/package-lock.json b/package-lock.json index 1370ce5..e5832d0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -932,9 +932,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001617", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001617.tgz", - "integrity": "sha512-mLyjzNI9I+Pix8zwcrpxEbGlfqOkF9kM3ptzmKNw5tizSyYwMe+nGLTqMK9cO+0E+Bh6TsBxNAaHWEM8xwSsmA==", + "version": "1.0.30001620", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001620.tgz", + "integrity": "sha512-WJvYsOjd1/BYUY6SNGUosK9DUidBPDTnOARHp3fSmFO1ekdxaY6nKRttEVrfMmYi80ctS0kz1wiWmm14fVc3ew==", "dev": true, "funding": [ { @@ -1080,9 +1080,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.764", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.764.tgz", - "integrity": "sha512-ZXbPV46Y4dNCA+k7YHB+BYlzcoMtZ1yH6V0tQ1ul0wmA7RiwJfS29LSdRlE1myWBXRzEgm/Lz6tryj5WVQiLmg==", + "version": "1.4.774", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.774.tgz", + "integrity": "sha512-132O1XCd7zcTkzS3FgkAzKmnBuNJjK8WjcTtNuoylj7MYbqw5eXehjQ5OK91g0zm7OTKIPeaAG4CPoRfD9M1Mg==", "dev": true }, "node_modules/emoji-regex": { @@ -1416,9 +1416,9 @@ } }, "node_modules/laravel-vite-plugin": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/laravel-vite-plugin/-/laravel-vite-plugin-1.0.2.tgz", - "integrity": "sha512-Mcclml10khYzBVxDwJro8wnVDwD4i7XOSEMACQNnarvTnHjrjXLLL+B/Snif2wYAyElsOqagJZ7VAinb/2vF5g==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/laravel-vite-plugin/-/laravel-vite-plugin-1.0.4.tgz", + "integrity": "sha512-dEj8Q/Fsn0kKbOQ55bl/NmyJL+dD6OxnVaM/nNByw5XV4b00ky6FzXKVuHLDr4BvSJKH1y6oaOcEG5wKpCZ5+A==", "dev": true, "dependencies": { "picocolors": "^1.0.0", @@ -1655,9 +1655,9 @@ } }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", "dev": true }, "node_modules/picomatch": { @@ -2335,9 +2335,9 @@ "dev": true }, "node_modules/update-browserslist-db": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.15.tgz", - "integrity": "sha512-K9HWH62x3/EalU1U6sjSZiylm9C8tgq2mSvshZpqc7QE69RaA2qjhkW2HlNA0tFpEbtyFz7HTqbSdN4MSwUodA==", + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", + "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", "dev": true, "funding": [ { @@ -2355,7 +2355,7 @@ ], "dependencies": { "escalade": "^3.1.2", - "picocolors": "^1.0.0" + "picocolors": "^1.0.1" }, "bin": { "update-browserslist-db": "cli.js" diff --git a/resources/views/components/latest-mod-listing.blade.php b/resources/views/components/latest-mod-listing.blade.php deleted file mode 100644 index 8d07edb..0000000 --- a/resources/views/components/latest-mod-listing.blade.php +++ /dev/null @@ -1,48 +0,0 @@ -
- -
-
-

{{ __('Latest Mods') }}

-
-
- -
-
- - -
diff --git a/resources/views/components/mod-list-section-partial.blade.php b/resources/views/components/mod-list-section-partial.blade.php new file mode 100644 index 0000000..df9fac3 --- /dev/null +++ b/resources/views/components/mod-list-section-partial.blade.php @@ -0,0 +1,6 @@ +@props(['mods']) + +
+ + +
diff --git a/resources/views/components/mod-list-section.blade.php b/resources/views/components/mod-list-section.blade.php new file mode 100644 index 0000000..a7528cd --- /dev/null +++ b/resources/views/components/mod-list-section.blade.php @@ -0,0 +1,7 @@ +@foreach ($sections as $section) + @include('components.mod-list-section-partial', [ + 'title' => $section['title'], + 'mods' => $section['mods'], + 'versionScope' => $section['versionScope'], + ]) +@endforeach diff --git a/resources/views/components/mod-list.blade.php b/resources/views/components/mod-list.blade.php new file mode 100644 index 0000000..092aa4b --- /dev/null +++ b/resources/views/components/mod-list.blade.php @@ -0,0 +1,40 @@ +@props(['mods', 'versionScope']) + + diff --git a/resources/views/components/page-content-title.blade.php b/resources/views/components/page-content-title.blade.php new file mode 100644 index 0000000..0dfbe39 --- /dev/null +++ b/resources/views/components/page-content-title.blade.php @@ -0,0 +1,12 @@ +
class(['md:flex md:items-center md:justify-between border-b pb-4 mb-6']) }}> +
+

{{ __($title) }}

+
+ @if (isset($buttonText) && isset($buttonLink)) + + @endif +
diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php index 5fd7205..34a89f8 100644 --- a/resources/views/home.blade.php +++ b/resources/views/home.blade.php @@ -1,6 +1,6 @@ -
+
{{-- Welcome Section --}} @@ -21,7 +21,9 @@
- +
+ +
diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php index 00dfd4a..835f7dd 100644 --- a/resources/views/layouts/app.blade.php +++ b/resources/views/layouts/app.blade.php @@ -20,6 +20,7 @@ +
diff --git a/resources/views/navigation-menu.blade.php b/resources/views/navigation-menu.blade.php index ffea1f7..2e1f9b5 100644 --- a/resources/views/navigation-menu.blade.php +++ b/resources/views/navigation-menu.blade.php @@ -5,7 +5,7 @@
diff --git a/routes/web.php b/routes/web.php index 85957e3..b68e331 100644 --- a/routes/web.php +++ b/routes/web.php @@ -4,7 +4,11 @@ use Illuminate\Support\Facades\Route; Route::get('/', function () { return view('home'); -}); +})->name('home'); + +Route::get('/mods', function () { + return 'list all mods'; +})->name('mods'); Route::middleware(['auth:sanctum', config('jetstream.auth_session'), 'verified'])->group(function () { Route::get('/dashboard', function () {