Files
SkinbaseNova/app/Http/Middleware/HandleInertiaRequests.php

93 lines
3.0 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Http\Middleware;
use App\Services\GroupService;
use Illuminate\Http\Request;
use Inertia\Middleware;
final class HandleInertiaRequests extends Middleware
{
protected $rootView = 'upload';
/**
* Select the root Blade view based on route prefix.
*/
public function rootView(Request $request): string
{
if ($request->path() === 'leaderboard') {
return 'leaderboard';
}
if (str_starts_with($request->path(), 'studio')) {
return 'studio';
}
// Profile pages: /@{username}
if (str_starts_with($request->path(), '@')) {
return 'profile.show';
}
// Feed pages — ordered most-specific first
if ($request->path() === 'feed/trending') {
return 'feed.trending';
}
if ($request->path() === 'feed/saved') {
return 'feed.saved';
}
if (str_starts_with($request->path(), 'feed')) {
return 'feed.following';
}
// Hashtag pages: /tags/{tag}
if (str_starts_with($request->path(), 'tags/')) {
return 'feed.hashtag';
}
return $this->rootView;
}
public function version(Request $request): ?string
{
return parent::version($request);
}
public function share(Request $request): array
{
return array_merge(parent::share($request), [
'auth' => [
'user' => $request->user() ? [
'id' => $request->user()->id,
'name' => $request->user()->name,
'is_admin' => $request->user()->isAdmin(),
'is_moderator' => $request->user()->isModerator(),
] : null,
],
'cdn' => [
'files_url' => config('cdn.files_url'),
],
'features' => [
'groups' => (bool) config('features.groups', true),
'groups_v1' => (bool) config('features.groups_v1', true),
'groups_v2' => (bool) config('features.groups_v2', true),
'group_posts' => (bool) config('features.group_posts', true),
'group_recruitment' => (bool) config('features.group_recruitment', true),
'group_join_requests' => (bool) config('features.group_join_requests', true),
'group_review_queue' => (bool) config('features.group_review_queue', true),
'group_projects' => (bool) config('features.group_projects', true),
'group_challenges' => (bool) config('features.group_challenges', true),
'group_events' => (bool) config('features.group_events', true),
'group_assets' => (bool) config('features.group_assets', true),
'group_activity_feed' => (bool) config('features.group_activity_feed', true),
],
'studio_groups' => $request->user()
? app(GroupService::class)->studioOptionsForUser($request->user())
: [],
]);
}
}