-
Notifications
You must be signed in to change notification settings - Fork 690
Expand file tree
/
Copy pathHandleInertiaRequests.php
More file actions
115 lines (101 loc) · 3.27 KB
/
HandleInertiaRequests.php
File metadata and controls
115 lines (101 loc) · 3.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
<?php
declare(strict_types=1);
namespace CraftCms\Cms\Http\Middleware;
use craft\helpers\Cp;
use CraftCms\Cms\Cms;
use CraftCms\Cms\Cp\Navigation;
use CraftCms\Cms\Cp\Rebrand;
use CraftCms\Cms\Edition;
use CraftCms\Cms\Queue\Enums\JobStatus;
use CraftCms\Cms\Queue\JobProgress;
use CraftCms\Cms\Support\Api;
use CraftCms\Cms\Support\Facades\Sites;
use CraftCms\Cms\Updates\Updates;
use Illuminate\Http\Request;
use Inertia\Middleware;
use Override;
use function CraftCms\Cms\action_url;
use function CraftCms\Cms\cp_url;
class HandleInertiaRequests extends Middleware
{
/**
* The root template that's loaded on the first page visit.
*
* @see https://inertiajs.com/server-side-setup#root-template
*
* @var string
*/
#[\Override]
protected $rootView = 'app';
/**
* Determines the current asset version.
*
* @see https://inertiajs.com/asset-versioning
*/
#[Override]
public function version(Request $request): ?string
{
return parent::version($request);
}
/**
* Define the props that are shared by default.
*
* @see https://inertiajs.com/shared-data
*
* @return array<string, mixed>
*/
#[Override]
public function share(Request $request): array
{
$isInstalled = Cms::isInstalled();
if (! $isInstalled) {
return parent::share($request);
}
$currentSite = Sites::getCurrentSite();
$updates = app(Updates::class);
$nav = app(Navigation::class);
$progressService = app(JobProgress::class);
if (! $updates->isCraftUpdatePending()) {
$currentUser = $request->user();
}
$systemIcon = Cp::iconSvg('c-outline');
if (Edition::isAtLeast(Edition::Pro) && $rebrand = app(Rebrand::class)) {
$systemIcon = $rebrand->getImage('icon');
}
$language = app()->getLocale();
view()->share('language', $language);
return [
...parent::share($request),
'flash' => fn () => [
'success' => $request->session()->get('success'),
'error' => $request->session()->get('error'),
],
'queue' => fn () => [
'displayedJob' => $progressService->getDisplayedJob(),
'hasReservedJobs' => $progressService->getByStatus(JobStatus::Reserved)->count() > 0,
'hasWaitingJobs' => $progressService->getByStatus(JobStatus::Pending)->count() > 0,
],
'craft' => fn () => [
'system' => [
'name' => Cms::systemName(),
'icon' => $systemIcon,
],
'app' => [
'version' => Cms::VERSION,
'edition' => Edition::get()->toArray(),
'language' => $language,
],
'site' => [
'url' => $currentSite->getBaseUrl(),
],
'currentUser' => [
'email' => $currentUser->email ?? null,
],
'cpUrl' => cp_url(),
'actionUrl' => action_url(),
'baseApiUrl' => Api::craftApiEndpoint(),
'nav' => $nav->getItems(),
],
];
}
}