From 20125dbc6f71a5c9e22fa9b2e59845717ad5ac9a Mon Sep 17 00:00:00 2001 From: Charles Date: Thu, 30 Jan 2025 06:21:28 -0500 Subject: [PATCH] Add front end badges (#960) * Add front end badges * I identify as a `string` * Display even if there's no limit * use `const`'s --------- Co-authored-by: RMartinOscar <40749467+RMartinOscar@users.noreply.github.com> --- .../Server/Resources/BackupResource.php | 28 ++++++++++++++++++ .../Server/Resources/DatabaseResource.php | 29 +++++++++++++++++++ .../Server/Resources/UserResource.php | 8 +++++ 3 files changed, 65 insertions(+) diff --git a/app/Filament/Server/Resources/BackupResource.php b/app/Filament/Server/Resources/BackupResource.php index 3a10c6446..13b84f50e 100644 --- a/app/Filament/Server/Resources/BackupResource.php +++ b/app/Filament/Server/Resources/BackupResource.php @@ -20,6 +20,34 @@ class BackupResource extends Resource protected static bool $canCreateAnother = false; + public const WARNING_THRESHOLD = 0.7; + + public static function getNavigationBadge(): string + { + /** @var Server $server */ + $server = Filament::getTenant(); + + $limit = $server->backup_limit; + + return $server->backups->count() . ($limit === 0 ? '' : ' / ' . $limit); + } + + public static function getNavigationBadgeColor(): ?string + { + /** @var Server $server */ + $server = Filament::getTenant(); + + $limit = $server->backup_limit; + $count = $server->backups->count(); + + if ($limit === 0) { + return null; + } + + return $count >= $limit ? 'danger' + : ($count >= $limit * self::WARNING_THRESHOLD ? 'warning' : 'success'); + } + // TODO: find better way handle server conflict state public static function canAccess(): bool { diff --git a/app/Filament/Server/Resources/DatabaseResource.php b/app/Filament/Server/Resources/DatabaseResource.php index 48ba84245..39f339244 100644 --- a/app/Filament/Server/Resources/DatabaseResource.php +++ b/app/Filament/Server/Resources/DatabaseResource.php @@ -18,6 +18,35 @@ class DatabaseResource extends Resource protected static ?string $navigationIcon = 'tabler-database'; + public const WARNING_THRESHOLD = 0.7; + + public static function getNavigationBadge(): string + { + /** @var Server $server */ + $server = Filament::getTenant(); + + $limit = $server->database_limit; + + return $server->databases->count() . ($limit === 0 ? '' : ' / ' . $limit); + } + + public static function getNavigationBadgeColor(): ?string + { + /** @var Server $server */ + $server = Filament::getTenant(); + + $limit = $server->database_limit; + $count = $server->databases->count(); + + if ($limit === 0) { + return null; + } + + return $count >= $limit + ? 'danger' + : ($count >= $limit * self::WARNING_THRESHOLD ? 'warning' : 'success'); + } + // TODO: find better way handle server conflict state public static function canAccess(): bool { diff --git a/app/Filament/Server/Resources/UserResource.php b/app/Filament/Server/Resources/UserResource.php index cc608a557..08a415f82 100644 --- a/app/Filament/Server/Resources/UserResource.php +++ b/app/Filament/Server/Resources/UserResource.php @@ -38,6 +38,14 @@ class UserResource extends Resource protected static ?string $tenantOwnershipRelationshipName = 'subServers'; + public static function getNavigationBadge(): string + { + /** @var Server $server */ + $server = Filament::getTenant(); + + return (string) $server->subusers->count(); + } + // TODO: find better way handle server conflict state public static function canAccess(): bool {