ldc-groupe/app/Http/Middleware/HandleInertiaRequests.php

76 lines
2.6 KiB
PHP

<?php
namespace App\Http\Middleware;
use Diglactic\Breadcrumbs\Breadcrumbs;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Gate;
use Inertia\Middleware;
use Uwil\LaravelBackend\Enums\RoleEnum;
use Uwil\LaravelBackend\Models\User;
use Uwil\LaravelCommon\Enums\ItemsPerPaginationEnum;
class HandleInertiaRequests extends Middleware
{
/**
* The root template that is loaded on the first page visit.
*
* @var string
*/
protected $rootView = 'back/app';
/**
* Define the props that are shared by default.
*
* @param \Illuminate\Http\Request $request
* @return array<string, mixed>
*/
public function share(Request $request): array
{
// Get translations from translator app.
$translations = Cache::remember(sprintf('translations_%s', app()->getLocale()), 86400, function () {
$translator = App::make('translator');
$property = (new \ReflectionClass($translator))->getProperty('loaded');
$property->setAccessible(true);
return $property->getValue($translator);
});
// Get all errors messages of session from middleware and redirect response.
$errors = array_filter([
...($request->session()->get('errors')?->getBag('default')?->toArray() ?? []),
...array_filter([
'error' => $request->session()->get('error'),
]),
]);
$props = [
...parent::share($request),
'appEnv' => [
'mode' => config('app.env'),
'name' => config('app.name'),
'locale' => app()->getLocale(),
],
'auth' => [
'user' => $request->user(),
'policies' => [
'users' => [
'viewAny' => Gate::allows('viewAny', User::class),
'create' => Gate::allows('create', User::class),
],
]
],
'enumItemsPerPagination' => ItemsPerPaginationEnum::toArray(),
'enumUserRole' => RoleEnum::toArray(),
'errors' => $errors,
'translations' => $translations,
];
if (Breadcrumbs::exists($request->route()->getName())) {
$props = array_merge($props, [
'breacrumbs' => Breadcrumbs::generate($request->route()->getName())->toArray()
]);
}
return $props;
}
}