API-Route to new global variables

This commit is contained in:
2026-02-05 09:18:24 +01:00
parent e9ae850002
commit 6fc65e195c
8 changed files with 108 additions and 65 deletions

View File

@@ -2,18 +2,10 @@
import AppLayout from '../../../../resources/js/layouts/AppLayout.vue'
import ShadowedBox from "../../../Views/Components/ShadowedBox.vue";
const props = defineProps({
navbar: Object,
tenant: String,
user: Object,
currentPath: String,
})
console.log(props.user.nicename)
</script>
<template>
<AppLayout title='Dashboard' :user="props.user" :navbar="props.navbar" :tenant="props.tenant" :currentPath="props.currentPath">
<AppLayout title='Dashboard'>
<diV class="dashboard-widget-container">
<shadowed-box class="dashboard-widget-box" style="width: 60%;">
Meine Anmeldungen

View File

@@ -1,15 +1,13 @@
<?php
use App\Domains\Dashboard\Controllers\DashboardController;
use App\Domains\UserManagement\Controllers\EmailVerificationController;
use App\Domains\UserManagement\Controllers\LoginController;
use App\Domains\UserManagement\Controllers\LogOutController;
use App\Domains\UserManagement\Controllers\RegistrationController;
use App\Domains\UserManagement\Controllers\ResetPasswordController;
use App\Http\Controllers\TestRenderInertiaProvider;
use App\Middleware\IdentifyTenant;
use App\Providers\GlobalDataProvider;
use Illuminate\Support\Facades\Route;
use Inertia\Inertia;
Route::middleware(IdentifyTenant::class)->group(function () {
Route::get('/register', [RegistrationController::class, 'loginForm']);
@@ -25,6 +23,11 @@ Route::middleware(IdentifyTenant::class)->group(function () {
Route::post('/logout', [LogoutController::class, 'logout']);
});
Route::prefix('api/v1/') ->group(function () {
Route::get('/retreive-global-data', GlobalDataProvider::class);
});
});

View File

@@ -38,6 +38,7 @@ class DevelopmentDataSeeder {
'email' => 'th.guenther@saale-mail.de',
'password' => bcrypt('development'),
'username' => 'development',
'active' => true,
]);
}
}

View File

@@ -101,6 +101,6 @@ class User extends Authenticatable
}
public function getNicename() : string {
return $this->nickname !== '' ? $this->nickname : $this->firstname;
return $this->nickname ?? $this->firstname;
}
}

View File

@@ -0,0 +1,46 @@
<?php
namespace App\Providers;
use App\Models\Tenant;
use App\Models\User;
use App\Repositories\UserRepository;
use App\Resources\UserResource;
class GlobalDataProvider {
private ?User $user;
public function __invoke() {
$this->user = auth()->user();
return response()->json([
'user' => null !== $this->user ? new UserResource($this->user)->toArray(request()) : [],
'navbar' => $this->generateNavbar(),
'tenant' => app('tenant'),
'availableLocalGroups' => Tenant::where(['is_active_local_group' => true])->get(),
]);
}
private function generateNavbar() : array {
$navigation = [
'personal' => [],
'common' => [],
'costunits' => [],
'events' => [],
];
$navigation['personal'][] = ['url' => '/', 'display' => 'Home'];
if (null !== $this->user) {
$navigation['personal'][] = ['url' => '/personal-data', 'display' => 'Meine Daten'];
$navigation['personal'][] = ['url' => '/messages', 'display' => 'Meine Nachrichten'];
$navigation['costunits'][] = ['url' => '/cost-unit/create', 'display' => 'Neue laufende Tätigkeit'];
}
$navigation['common'][] = ['url' => '/capture-invoice', 'display' => 'Neue Abrechnung'];
$navigation['common'][] = ['url' => '/available-events', 'display' => 'Verfügbare Veranstaltungen'];
return $navigation;
}
}

View File

@@ -22,35 +22,11 @@ final class InertiaProvider
}
public function render() : Response {
$this->props['navbar'] = $this->generateNavbar();
$this->props['tenant'] = app('tenant');
$this->props['user'] = new UserResource($this->user)->toArray(request());
$this->props['currentPath'] = request()->path();
$this->props['availableLocalGroups'] = Tenant::where(['is_active_local_group' => true])->get();
return Inertia::render(
str_replace('/', '/Views/', $this->vueFile),
$this->props
);
}
private function generateNavbar() : array {
$navigation = [
'personal' => [],
'common' => [],
'costunits' => [],
'events' => [],
];
$navigation['personal'][] = ['url' => '/', 'display' => 'Home'];
if (null !== $this->user) {
$navigation['personal'][] = ['url' => '/personal-data', 'display' => 'Meine Daten'];
$navigation['personal'][] = ['url' => '/messages', 'display' => 'Meine Nachrichten'];
}
$navigation['common'][] = ['url' => '/capture-invoice', 'display' => 'Neue Abrechnung'];
$navigation['common'][] = ['url' => '/available-events', 'display' => 'Verfügbare Veranstaltungen'];
return $navigation;
}
}