From 01cd499d0910020594bc23bb7b64c3505dc1fa32 Mon Sep 17 00:00:00 2001 From: Boy132 Date: Tue, 20 May 2025 10:27:27 +0200 Subject: [PATCH] allow to customize resource pages --- .../Admin/Resources/ApiKeyResource.php | 4 ++- .../Admin/Resources/DatabaseHostResource.php | 4 ++- app/Filament/Admin/Resources/EggResource.php | 4 ++- .../Admin/Resources/MountResource.php | 4 ++- app/Filament/Admin/Resources/NodeResource.php | 4 ++- app/Filament/Admin/Resources/RoleResource.php | 4 ++- .../Admin/Resources/ServerResource.php | 4 ++- app/Filament/Admin/Resources/UserResource.php | 4 ++- .../Admin/Resources/WebhookResource.php | 4 ++- app/Traits/Filament/CanCustomizePages.php | 33 +++++++++++++++++++ 10 files changed, 60 insertions(+), 9 deletions(-) create mode 100644 app/Traits/Filament/CanCustomizePages.php diff --git a/app/Filament/Admin/Resources/ApiKeyResource.php b/app/Filament/Admin/Resources/ApiKeyResource.php index fc6312848..4207bd0b3 100644 --- a/app/Filament/Admin/Resources/ApiKeyResource.php +++ b/app/Filament/Admin/Resources/ApiKeyResource.php @@ -6,6 +6,7 @@ use App\Filament\Admin\Resources\ApiKeyResource\Pages; use App\Filament\Admin\Resources\UserResource\Pages\EditUser; use App\Filament\Components\Tables\Columns\DateTimeColumn; use App\Models\ApiKey; +use App\Traits\Filament\CanCustomizePages; use App\Traits\Filament\CanCustomizeRelations; use Filament\Forms\Components\Fieldset; use Filament\Forms\Components\TagsInput; @@ -21,6 +22,7 @@ use Illuminate\Database\Eloquent\Builder; class ApiKeyResource extends Resource { + use CanCustomizePages; use CanCustomizeRelations; protected static ?string $model = ApiKey::class; @@ -145,7 +147,7 @@ class ApiKeyResource extends Resource ]); } - public static function getPages(): array + public static function getDefaultPages(): array { return [ 'index' => Pages\ListApiKeys::route('/'), diff --git a/app/Filament/Admin/Resources/DatabaseHostResource.php b/app/Filament/Admin/Resources/DatabaseHostResource.php index db94f51f3..223945ac2 100644 --- a/app/Filament/Admin/Resources/DatabaseHostResource.php +++ b/app/Filament/Admin/Resources/DatabaseHostResource.php @@ -5,6 +5,7 @@ namespace App\Filament\Admin\Resources; use App\Filament\Admin\Resources\DatabaseHostResource\Pages; use App\Filament\Admin\Resources\DatabaseHostResource\RelationManagers; use App\Models\DatabaseHost; +use App\Traits\Filament\CanCustomizePages; use App\Traits\Filament\CanCustomizeRelations; use Filament\Forms\Components\Section; use Filament\Forms\Components\Select; @@ -22,6 +23,7 @@ use Illuminate\Database\Eloquent\Builder; class DatabaseHostResource extends Resource { + use CanCustomizePages; use CanCustomizeRelations; protected static ?string $model = DatabaseHost::class; @@ -161,7 +163,7 @@ class DatabaseHostResource extends Resource ]; } - public static function getPages(): array + public static function getDefaultPages(): array { return [ 'index' => Pages\ListDatabaseHosts::route('/'), diff --git a/app/Filament/Admin/Resources/EggResource.php b/app/Filament/Admin/Resources/EggResource.php index 137e840dd..9dda9541d 100644 --- a/app/Filament/Admin/Resources/EggResource.php +++ b/app/Filament/Admin/Resources/EggResource.php @@ -5,11 +5,13 @@ namespace App\Filament\Admin\Resources; use App\Filament\Admin\Resources\EggResource\Pages; use App\Filament\Admin\Resources\EggResource\RelationManagers; use App\Models\Egg; +use App\Traits\Filament\CanCustomizePages; use App\Traits\Filament\CanCustomizeRelations; use Filament\Resources\Resource; class EggResource extends Resource { + use CanCustomizePages; use CanCustomizeRelations; protected static ?string $model = Egg::class; @@ -55,7 +57,7 @@ class EggResource extends Resource ]; } - public static function getPages(): array + public static function getDefaultPages(): array { return [ 'index' => Pages\ListEggs::route('/'), diff --git a/app/Filament/Admin/Resources/MountResource.php b/app/Filament/Admin/Resources/MountResource.php index dae8e5410..a22848001 100644 --- a/app/Filament/Admin/Resources/MountResource.php +++ b/app/Filament/Admin/Resources/MountResource.php @@ -4,6 +4,7 @@ namespace App\Filament\Admin\Resources; use App\Filament\Admin\Resources\MountResource\Pages; use App\Models\Mount; +use App\Traits\Filament\CanCustomizePages; use App\Traits\Filament\CanCustomizeRelations; use Filament\Forms\Components\Group; use Filament\Forms\Components\Section; @@ -23,6 +24,7 @@ use Illuminate\Database\Eloquent\Builder; class MountResource extends Resource { + use CanCustomizePages; use CanCustomizeRelations; protected static ?string $model = Mount::class; @@ -165,7 +167,7 @@ class MountResource extends Resource ]); } - public static function getPages(): array + public static function getDefaultPages(): array { return [ 'index' => Pages\ListMounts::route('/'), diff --git a/app/Filament/Admin/Resources/NodeResource.php b/app/Filament/Admin/Resources/NodeResource.php index 152942b3f..f9a4334ab 100644 --- a/app/Filament/Admin/Resources/NodeResource.php +++ b/app/Filament/Admin/Resources/NodeResource.php @@ -5,12 +5,14 @@ namespace App\Filament\Admin\Resources; use App\Filament\Admin\Resources\NodeResource\Pages; use App\Filament\Admin\Resources\NodeResource\RelationManagers; use App\Models\Node; +use App\Traits\Filament\CanCustomizePages; use App\Traits\Filament\CanCustomizeRelations; use Filament\Resources\Resource; use Illuminate\Database\Eloquent\Builder; class NodeResource extends Resource { + use CanCustomizePages; use CanCustomizeRelations; protected static ?string $model = Node::class; @@ -52,7 +54,7 @@ class NodeResource extends Resource ]; } - public static function getPages(): array + public static function getDefaultPages(): array { return [ 'index' => Pages\ListNodes::route('/'), diff --git a/app/Filament/Admin/Resources/RoleResource.php b/app/Filament/Admin/Resources/RoleResource.php index 1a8fcba4f..bb5831339 100644 --- a/app/Filament/Admin/Resources/RoleResource.php +++ b/app/Filament/Admin/Resources/RoleResource.php @@ -4,6 +4,7 @@ namespace App\Filament\Admin\Resources; use App\Filament\Admin\Resources\RoleResource\Pages; use App\Models\Role; +use App\Traits\Filament\CanCustomizePages; use App\Traits\Filament\CanCustomizeRelations; use Filament\Forms\Components\Actions\Action; use Filament\Forms\Components\CheckboxList; @@ -27,6 +28,7 @@ use Spatie\Permission\Contracts\Permission; class RoleResource extends Resource { + use CanCustomizePages; use CanCustomizeRelations; protected static ?string $model = Role::class; @@ -201,7 +203,7 @@ class RoleResource extends Resource ]); } - public static function getPages(): array + public static function getDefaultPages(): array { return [ 'index' => Pages\ListRoles::route('/'), diff --git a/app/Filament/Admin/Resources/ServerResource.php b/app/Filament/Admin/Resources/ServerResource.php index 3fe6a7d0f..3a7b0780d 100644 --- a/app/Filament/Admin/Resources/ServerResource.php +++ b/app/Filament/Admin/Resources/ServerResource.php @@ -6,6 +6,7 @@ use App\Filament\Admin\Resources\ServerResource\Pages; use App\Filament\Admin\Resources\ServerResource\RelationManagers; use App\Models\Mount; use App\Models\Server; +use App\Traits\Filament\CanCustomizePages; use App\Traits\Filament\CanCustomizeRelations; use Filament\Forms\Components\CheckboxList; use Filament\Forms\Get; @@ -14,6 +15,7 @@ use Illuminate\Database\Eloquent\Builder; class ServerResource extends Resource { + use CanCustomizePages; use CanCustomizeRelations; protected static ?string $model = Server::class; @@ -77,7 +79,7 @@ class ServerResource extends Resource ]; } - public static function getPages(): array + public static function getDefaultPages(): array { return [ 'index' => Pages\ListServers::route('/'), diff --git a/app/Filament/Admin/Resources/UserResource.php b/app/Filament/Admin/Resources/UserResource.php index 71a2e54c5..a5407cb80 100644 --- a/app/Filament/Admin/Resources/UserResource.php +++ b/app/Filament/Admin/Resources/UserResource.php @@ -6,6 +6,7 @@ use App\Filament\Admin\Resources\UserResource\Pages; use App\Filament\Admin\Resources\UserResource\RelationManagers; use App\Models\Role; use App\Models\User; +use App\Traits\Filament\CanCustomizePages; use App\Traits\Filament\CanCustomizeRelations; use Filament\Facades\Filament; use Filament\Forms\Components\CheckboxList; @@ -23,6 +24,7 @@ use Illuminate\Database\Eloquent\Builder; class UserResource extends Resource { + use CanCustomizePages; use CanCustomizeRelations; protected static ?string $model = User::class; @@ -156,7 +158,7 @@ class UserResource extends Resource ]; } - public static function getPages(): array + public static function getDefaultPages(): array { return [ 'index' => Pages\ListUsers::route('/'), diff --git a/app/Filament/Admin/Resources/WebhookResource.php b/app/Filament/Admin/Resources/WebhookResource.php index d9a415177..ec095307a 100644 --- a/app/Filament/Admin/Resources/WebhookResource.php +++ b/app/Filament/Admin/Resources/WebhookResource.php @@ -4,6 +4,7 @@ namespace App\Filament\Admin\Resources; use App\Filament\Admin\Resources\WebhookResource\Pages; use App\Models\WebhookConfiguration; +use App\Traits\Filament\CanCustomizePages; use App\Traits\Filament\CanCustomizeRelations; use Filament\Forms\Components\CheckboxList; use Filament\Forms\Components\TextInput; @@ -19,6 +20,7 @@ use Filament\Tables\Table; class WebhookResource extends Resource { + use CanCustomizePages; use CanCustomizeRelations; protected static ?string $model = WebhookConfiguration::class; @@ -101,7 +103,7 @@ class WebhookResource extends Resource ]); } - public static function getPages(): array + public static function getDefaultPages(): array { return [ 'index' => Pages\ListWebhookConfigurations::route('/'), diff --git a/app/Traits/Filament/CanCustomizePages.php b/app/Traits/Filament/CanCustomizePages.php new file mode 100644 index 000000000..a7593e69c --- /dev/null +++ b/app/Traits/Filament/CanCustomizePages.php @@ -0,0 +1,33 @@ + */ + protected static array $customPages = []; + + /** @param array $customPages */ + public static function registerCustomPages(array $customPages): void + { + static::$customPages = array_merge(static::$customPages, $customPages); + } + + /** + * @return array + */ + public static function getDefaultPages(): array + { + return []; + } + + /** + * @return array + */ + public static function getPages(): array + { + return array_unique(array_merge(static::getDefaultPages(), static::$customPages), SORT_REGULAR); + } +}