## Summary - align tenant dashboard KPI, attention, compare, and operations truth so the page does not read calmer than the tenant's actual state - preserve tenant-safe drill-through continuity into findings, baseline compare, and canonical operations, including disabled helper states for permission-limited members - add the Spec 173 artifact set and focused regression coverage for dashboard truth alignment and drill-through behavior ## Validation - `vendor/bin/sail bin pint --dirty --format agent` - `vendor/bin/sail artisan test --compact tests/Feature/Filament/DashboardKpisWidgetTest.php tests/Feature/Filament/TenantDashboardTruthAlignmentTest.php tests/Feature/Monitoring/OperationsDashboardDrillthroughTest.php tests/Feature/Filament/NeedsAttentionWidgetTest.php tests/Feature/Filament/BaselineCompareNowWidgetTest.php tests/Feature/Filament/BaselineCompareSummaryConsistencyTest.php tests/Feature/Findings/FindingsListDefaultsTest.php tests/Feature/Findings/FindingsListFiltersTest.php tests/Feature/Findings/FindingAdminTenantParityTest.php tests/Feature/OpsUx/CanonicalViewRunLinksTest.php tests/Feature/Filament/TenantDashboardTenantScopeTest.php tests/Feature/Filament/TenantDashboardDbOnlyTest.php tests/Feature/Filament/TableStandardsBaselineTest.php tests/Feature/Filament/TableDetailVisibilityTest.php` - integrated browser smoke on the tenant dashboard, including a permission-limited member scenario Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de> Reviewed-on: #204
52 lines
1.9 KiB
PHP
52 lines
1.9 KiB
PHP
<x-filament-panels::page>
|
|
@php($lifecycleSummary = $this->lifecycleVisibilitySummary())
|
|
|
|
<x-filament::tabs label="Operations tabs">
|
|
<x-filament::tabs.item
|
|
:active="$this->activeTab === 'all'"
|
|
wire:click="$set('activeTab', 'all')"
|
|
>
|
|
All
|
|
</x-filament::tabs.item>
|
|
<x-filament::tabs.item
|
|
:active="$this->activeTab === 'active'"
|
|
wire:click="$set('activeTab', 'active')"
|
|
>
|
|
Active
|
|
</x-filament::tabs.item>
|
|
<x-filament::tabs.item
|
|
:active="$this->activeTab === 'blocked'"
|
|
wire:click="$set('activeTab', 'blocked')"
|
|
>
|
|
Needs follow-up
|
|
</x-filament::tabs.item>
|
|
<x-filament::tabs.item
|
|
:active="$this->activeTab === 'succeeded'"
|
|
wire:click="$set('activeTab', 'succeeded')"
|
|
>
|
|
Succeeded
|
|
</x-filament::tabs.item>
|
|
<x-filament::tabs.item
|
|
:active="$this->activeTab === 'partial'"
|
|
wire:click="$set('activeTab', 'partial')"
|
|
>
|
|
Partial
|
|
</x-filament::tabs.item>
|
|
<x-filament::tabs.item
|
|
:active="$this->activeTab === 'failed'"
|
|
wire:click="$set('activeTab', 'failed')"
|
|
>
|
|
Failed
|
|
</x-filament::tabs.item>
|
|
</x-filament::tabs>
|
|
|
|
@if (($lifecycleSummary['likely_stale'] ?? 0) > 0 || ($lifecycleSummary['reconciled'] ?? 0) > 0)
|
|
<div class="mb-4 rounded-lg border border-amber-200 bg-amber-50 px-4 py-3 text-sm text-amber-900 dark:border-amber-500/30 dark:bg-amber-500/10 dark:text-amber-100">
|
|
{{ ($lifecycleSummary['likely_stale'] ?? 0) }} active operation(s) are beyond their lifecycle window.
|
|
{{ ($lifecycleSummary['reconciled'] ?? 0) }} operation(s) have already been automatically reconciled.
|
|
</div>
|
|
@endif
|
|
|
|
{{ $this->table }}
|
|
</x-filament-panels::page>
|