2024-04-09 18:45:01 -04:00
< ? php
namespace App\Filament\Resources\DatabaseHostResource\Pages ;
use App\Filament\Resources\DatabaseHostResource ;
2024-06-29 17:38:18 -04:00
use App\Filament\Resources\DatabaseHostResource\RelationManagers\DatabasesRelationManager ;
2024-06-03 03:54:33 +02:00
use App\Models\DatabaseHost ;
2024-06-26 00:42:55 +02:00
use App\Services\Databases\Hosts\HostUpdateService ;
2024-04-09 18:45:01 -04:00
use Filament\Actions ;
2024-04-23 19:45:11 -04:00
use Filament\Forms ;
use Filament\Forms\Components\Section ;
2024-10-04 01:15:08 +02:00
use Filament\Forms\Components\Select ;
use Filament\Forms\Components\TextInput ;
2024-04-23 19:45:11 -04:00
use Filament\Forms\Form ;
2024-06-26 00:42:55 +02:00
use Filament\Notifications\Notification ;
2024-10-04 01:15:08 +02:00
use Filament\Resources\Pages\EditRecord ;
2024-06-26 00:42:55 +02:00
use Illuminate\Database\Eloquent\Model ;
use PDOException ;
2024-04-09 18:45:01 -04:00
class EditDatabaseHost extends EditRecord
{
protected static string $resource = DatabaseHostResource :: class ;
2024-04-23 19:45:11 -04:00
public function form ( Form $form ) : Form
{
return $form
-> schema ([
2024-05-14 19:30:07 -04:00
Section :: make ()
-> columns ([
'default' => 2 ,
'sm' => 3 ,
'md' => 3 ,
'lg' => 4 ,
])
-> schema ([
2024-06-29 17:38:18 -04:00
TextInput :: make ( 'host' )
2024-05-14 19:30:07 -04:00
-> columnSpan ( 2 )
-> helperText ( 'The IP address or Domain name that should be used when attempting to connect to this MySQL host from this Panel to create new databases.' )
-> required ()
-> live ( onBlur : true )
-> afterStateUpdated ( fn ( $state , Forms\Set $set ) => $set ( 'name' , $state ))
2024-06-16 19:56:18 +02:00
-> maxLength ( 255 ),
2024-06-29 17:38:18 -04:00
TextInput :: make ( 'port' )
2024-05-14 19:30:07 -04:00
-> columnSpan ( 1 )
-> helperText ( 'The port that MySQL is running on for this host.' )
-> required ()
-> numeric ()
-> minValue ( 0 )
-> maxValue ( 65535 ),
2024-06-29 17:38:18 -04:00
TextInput :: make ( 'max_databases' )
2024-05-14 19:30:07 -04:00
-> label ( 'Max databases' )
-> helpertext ( 'Blank is unlimited.' )
-> numeric (),
2024-06-29 17:38:18 -04:00
TextInput :: make ( 'name' )
2024-05-14 19:30:07 -04:00
-> label ( 'Display Name' )
-> helperText ( 'A short identifier used to distinguish this location from others. Must be between 1 and 60 characters, for example, us.nyc.lvl3.' )
-> required ()
-> maxLength ( 60 ),
2024-06-29 17:38:18 -04:00
TextInput :: make ( 'username' )
2024-05-14 19:30:07 -04:00
-> helperText ( 'The username of an account that has enough permissions to create new users and databases on the system.' )
-> required ()
2024-06-16 19:56:18 +02:00
-> maxLength ( 255 ),
2024-06-29 17:38:18 -04:00
TextInput :: make ( 'password' )
2024-05-14 19:30:07 -04:00
-> helperText ( 'The password for the database user.' )
-> password ()
-> revealable ()
2024-07-05 18:24:07 -04:00
-> maxLength ( 255 ),
2024-06-29 17:38:18 -04:00
Select :: make ( 'node_id' )
2024-05-14 19:30:07 -04:00
-> searchable ()
-> preload ()
-> helperText ( 'This setting only defaults to this database host when adding a database to a server on the selected node.' )
-> label ( 'Linked Node' )
-> relationship ( 'node' , 'name' ),
]),
2024-04-23 19:45:11 -04:00
]);
}
2024-04-09 18:45:01 -04:00
protected function getHeaderActions () : array
{
return [
2024-06-03 03:54:33 +02:00
Actions\DeleteAction :: make ()
2024-06-03 04:09:36 +02:00
-> label ( fn ( DatabaseHost $databaseHost ) => $databaseHost -> databases () -> count () > 0 ? 'Database Host Has Databases' : 'Delete' )
-> disabled ( fn ( DatabaseHost $databaseHost ) => $databaseHost -> databases () -> count () > 0 ),
2024-05-12 22:34:41 -04:00
$this -> getSaveFormAction () -> formId ( 'form' ),
2024-04-09 18:45:01 -04:00
];
}
2024-05-10 16:15:10 -04:00
2024-05-12 22:34:41 -04:00
protected function getFormActions () : array
{
return [];
}
2024-05-14 20:10:27 -04:00
public function getRelationManagers () : array
{
return [
2024-06-29 17:38:18 -04:00
DatabasesRelationManager :: class ,
2024-05-14 20:10:27 -04:00
];
}
2024-06-26 00:42:55 +02:00
protected function handleRecordUpdate ( $record , array $data ) : Model
{
return resolve ( HostUpdateService :: class ) -> handle ( $record -> id , $data );
}
public function exception ( $e , $stopPropagation ) : void
{
if ( $e instanceof PDOException ) {
Notification :: make ()
-> title ( 'Error connecting to database host' )
-> body ( $e -> getMessage ())
-> color ( 'danger' )
-> icon ( 'tabler-database' )
-> danger ()
-> send ();
$stopPropagation ();
}
}
2024-04-09 18:45:01 -04:00
}