93 lines
3.0 KiB
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())
|
|
: [],
|
|
]);
|
|
}
|
|
}
|