mirror of
				https://github.com/pelican-dev/panel.git
				synced 2025-10-31 20:26:53 +01:00 
			
		
		
		
	Remove relation managers
This commit is contained in:
		
							parent
							
								
									17bc3de0d0
								
							
						
					
					
						commit
						0895bd2be5
					
				| @ -23,7 +23,6 @@ class NodeResource extends Resource | |||||||
|     public static function getRelations(): array |     public static function getRelations(): array | ||||||
|     { |     { | ||||||
|         return [ |         return [ | ||||||
|             RelationManagers\AllocationsRelationManager::class, |  | ||||||
|             RelationManagers\NodesRelationManager::class, |             RelationManagers\NodesRelationManager::class, | ||||||
|         ]; |         ]; | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -1,151 +0,0 @@ | |||||||
| <?php |  | ||||||
| 
 |  | ||||||
| namespace App\Filament\Resources\NodeResource\RelationManagers; |  | ||||||
| 
 |  | ||||||
| use App\Models\Allocation; |  | ||||||
| use App\Models\Server; |  | ||||||
| use App\Services\Allocations\AssignmentService; |  | ||||||
| use Filament\Forms; |  | ||||||
| use Filament\Forms\Form; |  | ||||||
| use Filament\Resources\RelationManagers\RelationManager; |  | ||||||
| use Filament\Tables; |  | ||||||
| use Filament\Tables\Table; |  | ||||||
| use Illuminate\Support\HtmlString; |  | ||||||
| 
 |  | ||||||
| class AllocationsRelationManager extends RelationManager |  | ||||||
| { |  | ||||||
|     protected static string $relationship = 'allocations'; |  | ||||||
| 
 |  | ||||||
|     protected static ?string $icon = 'tabler-plug-connected'; |  | ||||||
| 
 |  | ||||||
|     public function form(Form $form): Form |  | ||||||
|     { |  | ||||||
|         return $form |  | ||||||
|             ->schema([ |  | ||||||
|                 Forms\Components\TextInput::make('ip') |  | ||||||
|                     ->required() |  | ||||||
|                     ->maxLength(255), |  | ||||||
|             ]); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public function table(Table $table): Table |  | ||||||
|     { |  | ||||||
|         return $table |  | ||||||
|             ->recordTitleAttribute('ip') |  | ||||||
| 
 |  | ||||||
|             // Non Primary Allocations
 |  | ||||||
|             // ->checkIfRecordIsSelectableUsing(fn (Allocation $allocation) => $allocation->id !== $allocation->server?->allocation_id)
 |  | ||||||
| 
 |  | ||||||
|             // All assigned allocations
 |  | ||||||
|             ->checkIfRecordIsSelectableUsing(fn (Allocation $allocation) => $allocation->server_id === null) |  | ||||||
|             ->searchable() |  | ||||||
|             ->columns([ |  | ||||||
|                 Tables\Columns\TextColumn::make('id'), |  | ||||||
|                 Tables\Columns\TextColumn::make('port') |  | ||||||
|                     ->searchable() |  | ||||||
|                     ->label('Port'), |  | ||||||
|                 Tables\Columns\TextColumn::make('server.name') |  | ||||||
|                     ->label('Server') |  | ||||||
|                     ->icon('tabler-brand-docker') |  | ||||||
|                     ->searchable() |  | ||||||
|                     ->url(fn (Allocation $allocation): string => $allocation->server ? route('filament.admin.resources.servers.edit', ['record' => $allocation->server]) : ''), |  | ||||||
|                 Tables\Columns\TextInputColumn::make('ip_alias') |  | ||||||
|                     ->searchable() |  | ||||||
|                     ->label('Alias'), |  | ||||||
|                 Tables\Columns\TextInputColumn::make('ip') |  | ||||||
|                     ->searchable() |  | ||||||
|                     ->label('IP'), |  | ||||||
|             ]) |  | ||||||
|             ->filters([ |  | ||||||
|                 //
 |  | ||||||
|             ]) |  | ||||||
|             ->actions([ |  | ||||||
|                 //
 |  | ||||||
|             ]) |  | ||||||
|             ->headerActions([ |  | ||||||
|                 Tables\Actions\Action::make('create new allocation')->label('Create Allocations') |  | ||||||
|                     ->form(fn () => [ |  | ||||||
|                         Forms\Components\TextInput::make('allocation_ip') |  | ||||||
|                             ->datalist($this->getOwnerRecord()->ipAddresses() ?? []) |  | ||||||
|                             ->label('IP Address') |  | ||||||
|                             ->inlineLabel() |  | ||||||
|                             ->ipv4() |  | ||||||
|                             ->helperText("Usually your machine's public IP unless you are port forwarding.") |  | ||||||
|                             ->required(), |  | ||||||
|                         Forms\Components\TextInput::make('allocation_alias') |  | ||||||
|                             ->label('Alias') |  | ||||||
|                             ->inlineLabel() |  | ||||||
|                             ->default(null) |  | ||||||
|                             ->helperText('Optional display name to help you remember what these are.') |  | ||||||
|                             ->required(false), |  | ||||||
|                         Forms\Components\TagsInput::make('allocation_ports') |  | ||||||
|                             ->placeholder('Examples: 27015, 27017-27019') |  | ||||||
|                             ->helperText(new HtmlString(' |  | ||||||
|                                 These are the ports that users can connect to this Server through. |  | ||||||
|                                 <br /> |  | ||||||
|                                 You would have to port forward these on your home network. |  | ||||||
|                             ')) |  | ||||||
|                             ->label('Ports') |  | ||||||
|                             ->inlineLabel() |  | ||||||
|                             ->live() |  | ||||||
|                             ->afterStateUpdated(function ($state, Forms\Set $set) { |  | ||||||
|                                 $ports = collect(); |  | ||||||
|                                 $update = false; |  | ||||||
|                                 foreach ($state as $portEntry) { |  | ||||||
|                                     if (!str_contains($portEntry, '-')) { |  | ||||||
|                                         if (is_numeric($portEntry)) { |  | ||||||
|                                             $ports->push((int) $portEntry); |  | ||||||
| 
 |  | ||||||
|                                             continue; |  | ||||||
|                                         } |  | ||||||
| 
 |  | ||||||
|                                         // Do not add non numerical ports
 |  | ||||||
|                                         $update = true; |  | ||||||
| 
 |  | ||||||
|                                         continue; |  | ||||||
|                                     } |  | ||||||
| 
 |  | ||||||
|                                     $update = true; |  | ||||||
|                                     [$start, $end] = explode('-', $portEntry); |  | ||||||
|                                     if (!is_numeric($start) || !is_numeric($end)) { |  | ||||||
|                                         continue; |  | ||||||
|                                     } |  | ||||||
| 
 |  | ||||||
|                                     $start = max((int) $start, 0); |  | ||||||
|                                     $end = min((int) $end, 2 ** 16 - 1); |  | ||||||
|                                     foreach (range($start, $end) as $i) { |  | ||||||
|                                         $ports->push($i); |  | ||||||
|                                     } |  | ||||||
|                                 } |  | ||||||
| 
 |  | ||||||
|                                 $uniquePorts = $ports->unique()->values(); |  | ||||||
|                                 if ($ports->count() > $uniquePorts->count()) { |  | ||||||
|                                     $update = true; |  | ||||||
|                                     $ports = $uniquePorts; |  | ||||||
|                                 } |  | ||||||
| 
 |  | ||||||
|                                 $sortedPorts = $ports->sort()->values(); |  | ||||||
|                                 if ($sortedPorts->all() !== $ports->all()) { |  | ||||||
|                                     $update = true; |  | ||||||
|                                     $ports = $sortedPorts; |  | ||||||
|                                 } |  | ||||||
| 
 |  | ||||||
|                                 $ports = $ports->filter(fn ($port) => $port > 1024 && $port < 65535)->values(); |  | ||||||
| 
 |  | ||||||
|                                 if ($update) { |  | ||||||
|                                     $set('allocation_ports', $ports->all()); |  | ||||||
|                                 } |  | ||||||
|                             }) |  | ||||||
|                             ->splitKeys(['Tab', ' ', ',']) |  | ||||||
|                             ->required(), |  | ||||||
|                     ]) |  | ||||||
|                     ->action(fn (array $data) => resolve(AssignmentService::class)->handle($this->getOwnerRecord(), $data)), |  | ||||||
|             ]) |  | ||||||
|             ->bulkActions([ |  | ||||||
|                 Tables\Actions\BulkActionGroup::make([ |  | ||||||
|                     // Tables\Actions\DissociateBulkAction::make(),
 |  | ||||||
|                     Tables\Actions\DeleteBulkAction::make(), |  | ||||||
|                 ]), |  | ||||||
|             ]); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @ -745,13 +745,6 @@ class EditServer extends EditRecord | |||||||
|         return $data; |         return $data; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public function getRelationManagers(): array |  | ||||||
|     { |  | ||||||
|         return [ |  | ||||||
|             ServerResource\RelationManagers\AllocationsRelationManager::class, |  | ||||||
|         ]; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     private function shouldHideComponent(Forms\Get $get, Forms\Components\Component $component): bool |     private function shouldHideComponent(Forms\Get $get, Forms\Components\Component $component): bool | ||||||
|     { |     { | ||||||
|         $containsRuleIn = str($get('rules'))->explode('|')->reduce( |         $containsRuleIn = str($get('rules'))->explode('|')->reduce( | ||||||
|  | |||||||
| @ -1,75 +0,0 @@ | |||||||
| <?php |  | ||||||
| 
 |  | ||||||
| namespace App\Filament\Resources\ServerResource\RelationManagers; |  | ||||||
| 
 |  | ||||||
| use App\Models\Allocation; |  | ||||||
| use Filament\Forms; |  | ||||||
| use Filament\Forms\Form; |  | ||||||
| use Filament\Resources\RelationManagers\RelationManager; |  | ||||||
| use Filament\Tables; |  | ||||||
| use Filament\Tables\Table; |  | ||||||
| 
 |  | ||||||
| class AllocationsRelationManager extends RelationManager |  | ||||||
| { |  | ||||||
|     protected static string $relationship = 'allocations'; |  | ||||||
| 
 |  | ||||||
|     public function form(Form $form): Form |  | ||||||
|     { |  | ||||||
|         return $form |  | ||||||
|             ->schema([ |  | ||||||
|                 Forms\Components\TextInput::make('ip') |  | ||||||
|                     ->required() |  | ||||||
|                     ->maxLength(255), |  | ||||||
|             ]); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public function table(Table $table): Table |  | ||||||
|     { |  | ||||||
|         return $table |  | ||||||
|             ->recordTitleAttribute('ip') |  | ||||||
|             ->recordTitle(fn (Allocation $allocation) => "$allocation->ip:$allocation->port") |  | ||||||
|             ->checkIfRecordIsSelectableUsing(fn (Allocation $record) => $record->id !== $this->getOwnerRecord()->allocation_id) |  | ||||||
|             // ->actions
 |  | ||||||
|             // ->groups
 |  | ||||||
|             ->inverseRelationship('server') |  | ||||||
|             ->columns([ |  | ||||||
|                 Tables\Columns\TextColumn::make('ip')->label('IP'), |  | ||||||
|                 Tables\Columns\TextColumn::make('port')->label('Port'), |  | ||||||
|                 Tables\Columns\TextInputColumn::make('ip_alias')->label('Alias'), |  | ||||||
|                 Tables\Columns\IconColumn::make('primary') |  | ||||||
|                     ->icon(fn ($state) => match ($state) { |  | ||||||
|                         false => 'tabler-star', |  | ||||||
|                         true => 'tabler-star-filled', |  | ||||||
|                     }) |  | ||||||
|                     ->color(fn ($state) => match ($state) { |  | ||||||
|                         false => 'gray', |  | ||||||
|                         true => 'warning', |  | ||||||
|                     }) |  | ||||||
|                     ->action(fn (Allocation $allocation) => $this->getOwnerRecord()->update(['allocation_id' => $allocation->id])) |  | ||||||
|                     ->default(fn (Allocation $allocation) => $allocation->id === $this->getOwnerRecord()->allocation_id) |  | ||||||
|                     ->label('Primary'), |  | ||||||
|             ]) |  | ||||||
|             ->filters([ |  | ||||||
|                 //
 |  | ||||||
|             ]) |  | ||||||
|             ->actions([ |  | ||||||
|                 Tables\Actions\Action::make('make-primary') |  | ||||||
|                     ->action(fn (Allocation $allocation) => $this->getOwnerRecord()->update(['allocation_id' => $allocation->id])) |  | ||||||
|                     ->label(fn (Allocation $allocation) => $allocation->id === $this->getOwnerRecord()->allocation_id ? '' : 'Make Primary'), |  | ||||||
|             ]) |  | ||||||
|             ->headerActions([ |  | ||||||
|                 //TODO Tables\Actions\CreateAction::make()->label('Create Allocation'),
 |  | ||||||
|                 Tables\Actions\AssociateAction::make() |  | ||||||
|                     ->multiple() |  | ||||||
|                     ->preloadRecordSelect() |  | ||||||
|                     ->recordSelectOptionsQuery(fn ($query) => $query->whereBelongsTo($this->getOwnerRecord()->node)) |  | ||||||
|                     ->label('Add Allocation'), |  | ||||||
|             ]) |  | ||||||
|             ->bulkActions([ |  | ||||||
|                 Tables\Actions\BulkActionGroup::make([ |  | ||||||
|                     Tables\Actions\DissociateBulkAction::make(), |  | ||||||
|                     Tables\Actions\DeleteBulkAction::make(), |  | ||||||
|                 ]), |  | ||||||
|             ]); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Lance Pioch
						Lance Pioch