allow to customize resource relations

This commit is contained in:
Boy132 2025-05-20 10:14:07 +02:00
parent 6c20426757
commit 618a69ad86
14 changed files with 86 additions and 42 deletions

View File

@ -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\CanCustomizeRelations;
use Filament\Forms\Components\Fieldset;
use Filament\Forms\Components\TagsInput;
use Filament\Forms\Components\Textarea;
@ -20,6 +21,8 @@ use Illuminate\Database\Eloquent\Builder;
class ApiKeyResource extends Resource
{
use CanCustomizeRelations;
protected static ?string $model = ApiKey::class;
protected static ?string $navigationIcon = 'tabler-key';

View File

@ -3,7 +3,9 @@
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\CanCustomizeRelations;
use Filament\Forms\Components\Section;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
@ -20,6 +22,8 @@ use Illuminate\Database\Eloquent\Builder;
class DatabaseHostResource extends Resource
{
use CanCustomizeRelations;
protected static ?string $model = DatabaseHost::class;
protected static ?string $navigationIcon = 'tabler-database';
@ -150,6 +154,13 @@ class DatabaseHostResource extends Resource
]);
}
public static function getDefaultRelations(): array
{
return [
RelationManagers\DatabasesRelationManager::class,
];
}
public static function getPages(): array
{
return [

View File

@ -3,7 +3,6 @@
namespace App\Filament\Admin\Resources\DatabaseHostResource\Pages;
use App\Filament\Admin\Resources\DatabaseHostResource;
use App\Filament\Admin\Resources\DatabaseHostResource\RelationManagers\DatabasesRelationManager;
use App\Models\DatabaseHost;
use App\Services\Databases\Hosts\HostUpdateService;
use Filament\Actions\DeleteAction;
@ -39,17 +38,6 @@ class EditDatabaseHost extends EditRecord
return [];
}
public function getRelationManagers(): array
{
if (DatabasesRelationManager::canViewForRecord($this->getRecord(), static::class)) {
return [
DatabasesRelationManager::class,
];
}
return [];
}
protected function handleRecordUpdate(Model $record, array $data): Model
{
if (!$record instanceof DatabaseHost) {

View File

@ -3,7 +3,6 @@
namespace App\Filament\Admin\Resources\DatabaseHostResource\Pages;
use App\Filament\Admin\Resources\DatabaseHostResource;
use App\Filament\Admin\Resources\DatabaseHostResource\RelationManagers\DatabasesRelationManager;
use Filament\Actions\EditAction;
use Filament\Resources\Pages\ViewRecord;
@ -17,15 +16,4 @@ class ViewDatabaseHost extends ViewRecord
EditAction::make(),
];
}
public function getRelationManagers(): array
{
if (DatabasesRelationManager::canViewForRecord($this->getRecord(), static::class)) {
return [
DatabasesRelationManager::class,
];
}
return [];
}
}

View File

@ -3,11 +3,15 @@
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\CanCustomizeRelations;
use Filament\Resources\Resource;
class EggResource extends Resource
{
use CanCustomizeRelations;
protected static ?string $model = Egg::class;
protected static ?string $navigationIcon = 'tabler-eggs';
@ -44,6 +48,13 @@ class EggResource extends Resource
return ['name', 'tags', 'uuid', 'id'];
}
public static function getDefaultRelations(): array
{
return [
RelationManagers\ServersRelationManager::class,
];
}
public static function getPages(): array
{
return [

View File

@ -4,7 +4,6 @@ namespace App\Filament\Admin\Resources\EggResource\Pages;
use AbdelhamidErrahmouni\FilamentMonacoEditor\MonacoEditor;
use App\Filament\Admin\Resources\EggResource;
use App\Filament\Admin\Resources\EggResource\RelationManagers\ServersRelationManager;
use App\Filament\Components\Actions\ExportEggAction;
use App\Filament\Components\Actions\ImportEggAction;
use App\Filament\Components\Forms\Fields\CopyFrom;
@ -273,11 +272,4 @@ class EditEgg extends EditRecord
{
return [];
}
public function getRelationManagers(): array
{
return [
ServersRelationManager::class,
];
}
}

View File

@ -4,6 +4,7 @@ namespace App\Filament\Admin\Resources;
use App\Filament\Admin\Resources\MountResource\Pages;
use App\Models\Mount;
use App\Traits\Filament\CanCustomizeRelations;
use Filament\Forms\Components\Group;
use Filament\Forms\Components\Section;
use Filament\Forms\Components\Select;
@ -22,6 +23,8 @@ use Illuminate\Database\Eloquent\Builder;
class MountResource extends Resource
{
use CanCustomizeRelations;
protected static ?string $model = Mount::class;
protected static ?string $navigationIcon = 'tabler-layers-linked';

View File

@ -5,11 +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\CanCustomizeRelations;
use Filament\Resources\Resource;
use Illuminate\Database\Eloquent\Builder;
class NodeResource extends Resource
{
use CanCustomizeRelations;
protected static ?string $model = Node::class;
protected static ?string $navigationIcon = 'tabler-server-2';
@ -41,7 +44,7 @@ class NodeResource extends Resource
return (string) static::getEloquentQuery()->count() ?: null;
}
public static function getRelations(): array
public static function getDefaultRelations(): array
{
return [
RelationManagers\AllocationsRelationManager::class,

View File

@ -4,6 +4,7 @@ namespace App\Filament\Admin\Resources;
use App\Filament\Admin\Resources\RoleResource\Pages;
use App\Models\Role;
use App\Traits\Filament\CanCustomizeRelations;
use Filament\Forms\Components\Actions\Action;
use Filament\Forms\Components\CheckboxList;
use Filament\Forms\Components\Component;
@ -26,6 +27,8 @@ use Spatie\Permission\Contracts\Permission;
class RoleResource extends Resource
{
use CanCustomizeRelations;
protected static ?string $model = Role::class;
protected static ?string $navigationIcon = 'tabler-users-group';

View File

@ -3,8 +3,10 @@
namespace App\Filament\Admin\Resources;
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\CanCustomizeRelations;
use Filament\Forms\Components\CheckboxList;
use Filament\Forms\Get;
use Filament\Resources\Resource;
@ -12,6 +14,8 @@ use Illuminate\Database\Eloquent\Builder;
class ServerResource extends Resource
{
use CanCustomizeRelations;
protected static ?string $model = Server::class;
protected static ?string $navigationIcon = 'tabler-brand-docker';
@ -66,6 +70,13 @@ class ServerResource extends Resource
->columnSpanFull();
}
public static function getDefaultRelations(): array
{
return [
RelationManagers\AllocationsRelationManager::class,
];
}
public static function getPages(): array
{
return [

View File

@ -5,7 +5,6 @@ namespace App\Filament\Admin\Resources\ServerResource\Pages;
use AbdelhamidErrahmouni\FilamentMonacoEditor\MonacoEditor;
use App\Enums\SuspendAction;
use App\Filament\Admin\Resources\ServerResource;
use App\Filament\Admin\Resources\ServerResource\RelationManagers\AllocationsRelationManager;
use App\Filament\Components\Forms\Actions\PreviewStartupAction;
use App\Filament\Components\Forms\Actions\RotateDatabasePasswordAction;
use App\Filament\Server\Pages\Console;
@ -1136,13 +1135,6 @@ class EditServer extends EditRecord
return null;
}
public function getRelationManagers(): array
{
return [
AllocationsRelationManager::class,
];
}
private function shouldHideComponent(ServerVariable $serverVariable, Forms\Components\Component $component): bool
{
$containsRuleIn = array_first($serverVariable->variable->rules, fn ($value) => str($value)->startsWith('in:'), false);

View File

@ -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\CanCustomizeRelations;
use Filament\Facades\Filament;
use Filament\Forms\Components\CheckboxList;
use Filament\Forms\Components\TextInput;
@ -22,6 +23,8 @@ use Illuminate\Database\Eloquent\Builder;
class UserResource extends Resource
{
use CanCustomizeRelations;
protected static ?string $model = User::class;
protected static ?string $navigationIcon = 'tabler-users';
@ -146,7 +149,7 @@ class UserResource extends Resource
]);
}
public static function getRelations(): array
public static function getDefaultRelations(): array
{
return [
RelationManagers\ServersRelationManager::class,

View File

@ -4,6 +4,7 @@ namespace App\Filament\Admin\Resources;
use App\Filament\Admin\Resources\WebhookResource\Pages;
use App\Models\WebhookConfiguration;
use App\Traits\Filament\CanCustomizeRelations;
use Filament\Forms\Components\CheckboxList;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Form;
@ -18,6 +19,8 @@ use Filament\Tables\Table;
class WebhookResource extends Resource
{
use CanCustomizeRelations;
protected static ?string $model = WebhookConfiguration::class;
protected static ?string $navigationIcon = 'tabler-webhook';

View File

@ -0,0 +1,33 @@
<?php
namespace App\Traits\Filament;
use Filament\Resources\RelationManagers\RelationManager;
trait CanCustomizeRelations
{
/** @var array<class-string<RelationManager>> */
protected static array $customRelations = [];
/** @param class-string<RelationManager>[] $customRelations */
public static function registerCustomRelations(string ...$customRelations): void
{
static::$customRelations = array_merge(static::$customRelations, $customRelations);
}
/**
* @return class-string<RelationManager>[]
*/
public static function getDefaultRelations(): array
{
return [];
}
/**
* @return class-string<RelationManager>[]
*/
public static function getRelations(): array
{
return array_unique(array_merge(static::getDefaultRelations(), static::$customRelations));
}
}