Implements Spec 114 System Console Control Tower pages, widgets, triage actions, directory views, and enterprise polish (badges, repair workspace owners table, health indicator).
130 lines
6.3 KiB
PHP
130 lines
6.3 KiB
PHP
@php
|
|
/** @var \App\Models\Tenant $tenant */
|
|
$tenant = $this->tenant;
|
|
$providerConnections = $this->providerConnections();
|
|
$permissions = $this->tenantPermissions();
|
|
$runs = $this->recentRuns();
|
|
@endphp
|
|
|
|
<x-filament-panels::page>
|
|
<div class="space-y-6">
|
|
<x-filament::section>
|
|
<x-slot name="heading">
|
|
{{ $tenant->name }}
|
|
</x-slot>
|
|
|
|
<x-slot name="description">
|
|
Workspace: {{ $tenant->workspace?->name ?? 'Unknown' }}
|
|
</x-slot>
|
|
|
|
<div class="flex flex-wrap items-center gap-2">
|
|
<x-filament::badge
|
|
:color="\App\Support\Badges\BadgeRenderer::spec(\App\Support\Badges\BadgeDomain::TenantStatus, (string) $tenant->status)->color"
|
|
:icon="\App\Support\Badges\BadgeRenderer::spec(\App\Support\Badges\BadgeDomain::TenantStatus, (string) $tenant->status)->icon"
|
|
>
|
|
{{ \App\Support\Badges\BadgeRenderer::spec(\App\Support\Badges\BadgeDomain::TenantStatus, (string) $tenant->status)->label }}
|
|
</x-filament::badge>
|
|
|
|
@if ($tenant->external_id)
|
|
<span class="text-xs text-gray-500 dark:text-gray-400">External ID: {{ $tenant->external_id }}</span>
|
|
@endif
|
|
</div>
|
|
|
|
<div class="mt-4">
|
|
<x-filament::link :href="$this->adminTenantUrl()" icon="heroicon-m-arrow-top-right-on-square">
|
|
Open in /admin
|
|
</x-filament::link>
|
|
</div>
|
|
</x-filament::section>
|
|
|
|
<x-filament::section>
|
|
<x-slot name="heading">
|
|
Connectivity signals
|
|
</x-slot>
|
|
|
|
@if ($providerConnections->isEmpty())
|
|
<p class="text-sm text-gray-500 dark:text-gray-400">No provider connections found.</p>
|
|
@else
|
|
<div class="space-y-2">
|
|
@foreach ($providerConnections as $connection)
|
|
<div class="rounded-lg border border-gray-200 px-4 py-3 dark:border-white/10">
|
|
<div class="flex flex-wrap items-center gap-2">
|
|
<span class="font-medium text-gray-950 dark:text-white">{{ $connection->provider }}</span>
|
|
|
|
<x-filament::badge
|
|
:color="\App\Support\Badges\BadgeRenderer::spec(\App\Support\Badges\BadgeDomain::ProviderConnectionStatus, (string) $connection->status)->color"
|
|
>
|
|
{{ \App\Support\Badges\BadgeRenderer::spec(\App\Support\Badges\BadgeDomain::ProviderConnectionStatus, (string) $connection->status)->label }}
|
|
</x-filament::badge>
|
|
|
|
<x-filament::badge
|
|
:color="\App\Support\Badges\BadgeRenderer::spec(\App\Support\Badges\BadgeDomain::ProviderConnectionHealth, (string) $connection->health_status)->color"
|
|
>
|
|
{{ \App\Support\Badges\BadgeRenderer::spec(\App\Support\Badges\BadgeDomain::ProviderConnectionHealth, (string) $connection->health_status)->label }}
|
|
</x-filament::badge>
|
|
|
|
@if ($connection->is_default)
|
|
<x-filament::badge color="info">Default</x-filament::badge>
|
|
@endif
|
|
</div>
|
|
</div>
|
|
@endforeach
|
|
</div>
|
|
@endif
|
|
</x-filament::section>
|
|
|
|
<x-filament::section>
|
|
<x-slot name="heading">
|
|
Permission signals
|
|
</x-slot>
|
|
|
|
@if ($permissions->isEmpty())
|
|
<p class="text-sm text-gray-500 dark:text-gray-400">No cached permission checks available.</p>
|
|
@else
|
|
<div class="space-y-2">
|
|
@foreach ($permissions as $permission)
|
|
<div class="flex items-center justify-between rounded-lg border border-gray-200 px-4 py-3 dark:border-white/10">
|
|
<span class="font-medium text-gray-950 dark:text-white">{{ $permission->permission_key }}</span>
|
|
<x-filament::badge
|
|
:color="\App\Support\Badges\BadgeRenderer::spec(\App\Support\Badges\BadgeDomain::TenantPermissionStatus, (string) $permission->status)->color"
|
|
>
|
|
{{ \App\Support\Badges\BadgeRenderer::spec(\App\Support\Badges\BadgeDomain::TenantPermissionStatus, (string) $permission->status)->label }}
|
|
</x-filament::badge>
|
|
</div>
|
|
@endforeach
|
|
</div>
|
|
@endif
|
|
</x-filament::section>
|
|
|
|
<x-filament::section>
|
|
<x-slot name="heading">
|
|
Recent operations
|
|
</x-slot>
|
|
|
|
@if ($runs->isEmpty())
|
|
<p class="text-sm text-gray-500 dark:text-gray-400">No recent operation runs for this tenant.</p>
|
|
@else
|
|
<div class="space-y-2">
|
|
@foreach ($runs as $run)
|
|
<a
|
|
href="{{ $run['url'] }}"
|
|
class="block rounded-lg border border-gray-200 px-4 py-3 hover:border-primary-400 hover:bg-gray-50 dark:border-white/10 dark:hover:border-primary-500 dark:hover:bg-white/5"
|
|
>
|
|
<div class="flex items-center justify-between">
|
|
<span class="font-medium text-gray-950 dark:text-white">#{{ $run['id'] }} · {{ $run['label'] }}</span>
|
|
<span class="text-xs text-gray-500 dark:text-gray-400">{{ $run['started'] }}</span>
|
|
</div>
|
|
</a>
|
|
@endforeach
|
|
</div>
|
|
@endif
|
|
|
|
<div class="mt-4">
|
|
<x-filament::link :href="$this->runsUrl()" icon="heroicon-m-arrow-top-right-on-square">
|
|
Open operations runs
|
|
</x-filament::link>
|
|
</div>
|
|
</x-filament::section>
|
|
</div>
|
|
</x-filament-panels::page>
|