Implements Spec 114 System Console Control Tower pages, widgets, triage actions, directory views, and enterprise polish (badges, repair workspace owners table, health indicator).
68 lines
2.8 KiB
PHP
68 lines
2.8 KiB
PHP
<x-filament-panels::page>
|
|
<div class="space-y-6">
|
|
{{-- Stats widgets --}}
|
|
@if (method_exists($this, 'getHeaderWidgets'))
|
|
<x-filament-widgets::widgets
|
|
:widgets="$this->getVisibleHeaderWidgets()"
|
|
:columns="1"
|
|
/>
|
|
@endif
|
|
|
|
{{-- Purpose box --}}
|
|
<div class="rounded-lg border border-gray-200 bg-white p-4 dark:border-gray-800 dark:bg-gray-900">
|
|
<div class="text-sm text-gray-700 dark:text-gray-200">
|
|
<p class="font-medium">Purpose</p>
|
|
<p class="mt-1">
|
|
This page exists to recover from broken workspace ownership state (e.g. a workspace with zero owners due to manual DB edits).
|
|
Actions here require break-glass mode and are fully audited.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
|
|
{{-- Workspace table --}}
|
|
{{ $this->table }}
|
|
|
|
{{-- Recent break-glass actions --}}
|
|
@php
|
|
$recentActions = $this->getRecentBreakGlassActions();
|
|
@endphp
|
|
|
|
<x-filament::section>
|
|
<x-slot name="heading">
|
|
Recent break-glass actions
|
|
</x-slot>
|
|
|
|
<x-slot name="description">
|
|
Last 10 break-glass audit log entries.
|
|
</x-slot>
|
|
|
|
@if (empty($recentActions))
|
|
<div class="rounded-lg border border-dashed border-gray-300 px-4 py-6 text-center text-sm text-gray-500 dark:border-white/15 dark:text-gray-400">
|
|
No break-glass actions recorded yet.
|
|
</div>
|
|
@else
|
|
<div class="divide-y divide-gray-200 dark:divide-white/10">
|
|
@foreach ($recentActions as $entry)
|
|
<div class="flex items-center justify-between gap-4 px-1 py-3">
|
|
<div class="min-w-0 flex-1">
|
|
<div class="truncate text-sm font-medium text-gray-950 dark:text-white">
|
|
{{ $entry['action'] }}
|
|
</div>
|
|
<div class="mt-0.5 text-xs text-gray-500 dark:text-gray-400">
|
|
by {{ $entry['actor'] }}
|
|
@if ($entry['workspace'])
|
|
· Workspace: {{ $entry['workspace'] }}
|
|
@endif
|
|
</div>
|
|
</div>
|
|
<div class="shrink-0 text-xs text-gray-500 dark:text-gray-400">
|
|
{{ $entry['recorded_at'] }}
|
|
</div>
|
|
</div>
|
|
@endforeach
|
|
</div>
|
|
@endif
|
|
</x-filament::section>
|
|
</div>
|
|
</x-filament-panels::page>
|