Feature branch PR for Spec 114. This branch contains the merged agent session work (see merge commit on branch). Tests - `vendor/bin/sail artisan test --compact tests/Feature/System/Spec114/` Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de> Reviewed-on: #139
51 lines
1.6 KiB
PHP
51 lines
1.6 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Filament\System\Widgets;
|
|
|
|
use App\Models\Workspace;
|
|
use App\Models\WorkspaceMembership;
|
|
use App\Support\Auth\WorkspaceRole;
|
|
use Filament\Widgets\StatsOverviewWidget;
|
|
use Filament\Widgets\StatsOverviewWidget\Stat;
|
|
|
|
class RepairWorkspaceOwnersStats extends StatsOverviewWidget
|
|
{
|
|
protected static bool $isLazy = false;
|
|
|
|
protected int|string|array $columnSpan = 'full';
|
|
|
|
/**
|
|
* @return array<Stat>
|
|
*/
|
|
protected function getStats(): array
|
|
{
|
|
$totalWorkspaces = Workspace::query()->count();
|
|
|
|
$workspacesWithOwners = WorkspaceMembership::query()
|
|
->where('role', WorkspaceRole::Owner->value)
|
|
->distinct('workspace_id')
|
|
->count('workspace_id');
|
|
|
|
$ownerlessWorkspaces = $totalWorkspaces - $workspacesWithOwners;
|
|
|
|
$totalMembers = WorkspaceMembership::query()->count();
|
|
|
|
return [
|
|
Stat::make('Total workspaces', $totalWorkspaces)
|
|
->color('gray')
|
|
->icon('heroicon-o-rectangle-stack'),
|
|
Stat::make('Healthy (has owner)', $workspacesWithOwners)
|
|
->color($workspacesWithOwners > 0 ? 'success' : 'gray')
|
|
->icon('heroicon-o-check-circle'),
|
|
Stat::make('Ownerless', $ownerlessWorkspaces)
|
|
->color($ownerlessWorkspaces > 0 ? 'danger' : 'success')
|
|
->icon($ownerlessWorkspaces > 0 ? 'heroicon-o-exclamation-triangle' : 'heroicon-o-check-circle'),
|
|
Stat::make('Total memberships', $totalMembers)
|
|
->color('gray')
|
|
->icon('heroicon-o-users'),
|
|
];
|
|
}
|
|
}
|