dashboard update

This commit is contained in:
Mark Gregory
2026-07-24 14:48:13 +01:00
parent 3dabaf17a7
commit 9036b3f387
7 changed files with 71 additions and 65 deletions
@@ -13,7 +13,7 @@ final class DashboardController extends Controller
{
public function __invoke()
{
return view('administration::dashboard', [
return view('stylist-theme-admin::dashboard', [
'userCount' => User::count(),
'roleCount' => Schema::hasTable('roles') ? Role::count() : 0,
'mediaCount' => Schema::hasTable('media') ? Media::count() : 0,
@@ -1,44 +0,0 @@
<x-layouts.app :title="__('Administration')">
<div class="space-y-6">
<div><h1 class="text-2xl font-semibold text-zinc-950 dark:text-zinc-100">Administration</h1>
<p class="mt-1 text-sm text-zinc-600 dark:text-zinc-400">Platform health and recent activity.</p></div>
<div class="grid gap-4 sm:grid-cols-2 xl:grid-cols-4">
@foreach([['Users',$userCount,'users'],['Roles',$roleCount,'shield-check'],['Media',$mediaCount,'photo'],['Audit events',$auditCount,'clipboard-document-list']] as [$label,$count,$icon])
<div
class="rounded-xl border border-zinc-200 bg-white p-5 shadow-sm dark:border-zinc-700 dark:bg-zinc-900">
<flux:icon :name="$icon" class="size-5 text-zinc-500"/>
<div class="mt-4 text-3xl font-semibold">{{ $count }}</div>
<div class="text-sm text-zinc-500">{{ $label }}</div>
</div>
@endforeach
</div>
<div class="grid gap-6 xl:grid-cols-2">
<div class="rounded-xl border border-zinc-200 bg-white shadow-sm dark:border-zinc-700 dark:bg-zinc-900">
<div class="border-b border-zinc-200 px-5 py-4 font-semibold dark:border-zinc-700">Modules</div>
<div class="divide-y divide-zinc-200 dark:divide-zinc-800">@foreach($modules as $module)
<div class="flex items-center justify-between px-5 py-3">
<div>
<div class="font-medium">{{ $module['name'] }}</div>
<div class="text-xs text-zinc-500">v{{ $module['version'] }}</div>
</div>
<span
class="rounded-full px-2.5 py-1 text-xs {{ $module['enabled'] ? 'bg-emerald-100 text-emerald-800 dark:bg-emerald-950 dark:text-emerald-200' : 'bg-zinc-100 text-zinc-600 dark:bg-zinc-800 dark:text-zinc-300' }}">{{ $module['enabled'] ? 'Enabled' : 'Disabled' }}</span>
</div>
@endforeach</div>
</div>
<div class="rounded-xl border border-zinc-200 bg-white shadow-sm dark:border-zinc-700 dark:bg-zinc-900">
<div class="border-b border-zinc-200 px-5 py-4 font-semibold dark:border-zinc-700">Recent audit
activity
</div>
<div class="divide-y divide-zinc-200 dark:divide-zinc-800">@forelse($recentAudit as $log)
<div class="px-5 py-3">
<div class="font-medium">{{ $log->event }}</div>
<div class="text-xs text-zinc-500">{{ optional($log->created_at)->diffForHumans() }}</div>
</div>
@empty
<div class="px-5 py-8 text-center text-sm text-zinc-500">No audit events yet.</div>
@endforelse</div>
</div>
</div>
</div>
</x-layouts.app>
-2
View File
@@ -1,10 +1,8 @@
<?php
use Illuminate\Support\Facades\Route;
use Modules\Administration\Http\Controllers\DashboardController;
use Modules\Administration\Http\Controllers\ModuleController;
Route::middleware(['auth', 'verified'])->prefix('administration')->name('administration.')->group(function (): void {
Route::get('/', DashboardController::class)->name('dashboard');
Route::get('/modules', [ModuleController::class, 'index'])->name('modules.index');
});
@@ -1,5 +1,17 @@
<?php
use Illuminate\Support\Facades\Route;
use Modules\Administration\Http\Controllers\DashboardController;
it('boots the Administration module', function (): void {
expect(config('administration.name'))->toBe('Administration');
});
it('uses the primary dashboard for administration overview content', function (): void {
$dashboard = Route::getRoutes()->getByName('dashboard');
expect($dashboard)->not->toBeNull()
->and($dashboard->getActionName())->toBe(DashboardController::class)
->and(view()->exists('stylist-theme-admin::dashboard'))->toBeTrue()
->and(Route::has('administration.dashboard'))->toBeFalse();
});