mirror of
https://github.com/pelican-dev/panel.git
synced 2025-05-20 19:14:45 +02:00
Use afterSave
instead of handleRecordUpdate
& move transferServer
(#1195)
* Use `afterSave` instead of `handleRecordUpdate` & move `transferServer` * Override `getSavedNotification` instead of `save`
This commit is contained in:
parent
e562a35057
commit
c0fa8c1cd8
@ -4,6 +4,7 @@ namespace App\Filament\Admin\Resources\NodeResource\Pages;
|
|||||||
|
|
||||||
use App\Filament\Admin\Resources\NodeResource;
|
use App\Filament\Admin\Resources\NodeResource;
|
||||||
use App\Models\Node;
|
use App\Models\Node;
|
||||||
|
use App\Repositories\Daemon\DaemonConfigurationRepository;
|
||||||
use App\Services\Helpers\SoftwareVersionService;
|
use App\Services\Helpers\SoftwareVersionService;
|
||||||
use App\Services\Nodes\NodeAutoDeployService;
|
use App\Services\Nodes\NodeAutoDeployService;
|
||||||
use App\Services\Nodes\NodeUpdateService;
|
use App\Services\Nodes\NodeUpdateService;
|
||||||
@ -26,7 +27,7 @@ use Filament\Forms\Set;
|
|||||||
use Filament\Notifications\Notification;
|
use Filament\Notifications\Notification;
|
||||||
use Filament\Resources\Pages\EditRecord;
|
use Filament\Resources\Pages\EditRecord;
|
||||||
use Filament\Support\Enums\Alignment;
|
use Filament\Support\Enums\Alignment;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Http\Client\ConnectionException;
|
||||||
use Illuminate\Support\HtmlString;
|
use Illuminate\Support\HtmlString;
|
||||||
use Webbingbrasil\FilamentCopyActions\Forms\Actions\CopyAction;
|
use Webbingbrasil\FilamentCopyActions\Forms\Actions\CopyAction;
|
||||||
|
|
||||||
@ -34,12 +35,13 @@ class EditNode extends EditRecord
|
|||||||
{
|
{
|
||||||
protected static string $resource = NodeResource::class;
|
protected static string $resource = NodeResource::class;
|
||||||
|
|
||||||
private bool $errored = false;
|
private DaemonConfigurationRepository $daemonConfigurationRepository;
|
||||||
|
|
||||||
private NodeUpdateService $nodeUpdateService;
|
private NodeUpdateService $nodeUpdateService;
|
||||||
|
|
||||||
public function boot(NodeUpdateService $nodeUpdateService): void
|
public function boot(DaemonConfigurationRepository $daemonConfigurationRepository, NodeUpdateService $nodeUpdateService): void
|
||||||
{
|
{
|
||||||
|
$this->daemonConfigurationRepository = $daemonConfigurationRepository;
|
||||||
$this->nodeUpdateService = $nodeUpdateService;
|
$this->nodeUpdateService = $nodeUpdateService;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -597,39 +599,6 @@ class EditNode extends EditRecord
|
|||||||
return $data;
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function handleRecordUpdate(Model $record, array $data): Model
|
|
||||||
{
|
|
||||||
if (!$record instanceof Node) {
|
|
||||||
return $record;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
$record = $this->nodeUpdateService->handle($record, $data);
|
|
||||||
} catch (Exception $exception) {
|
|
||||||
$this->errored = true;
|
|
||||||
|
|
||||||
Notification::make()
|
|
||||||
->title(trans('admin/node.error_connecting', ['node' => $record->name]))
|
|
||||||
->body(trans('admin/node.error_connecting_description'))
|
|
||||||
->color('warning')
|
|
||||||
->icon('tabler-database')
|
|
||||||
->warning()
|
|
||||||
->send();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return parent::handleRecordUpdate($record, $data);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function getSavedNotification(): ?Notification
|
|
||||||
{
|
|
||||||
if ($this->errored) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return parent::getSavedNotification();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function getFormActions(): array
|
protected function getFormActions(): array
|
||||||
{
|
{
|
||||||
return [];
|
return [];
|
||||||
@ -648,6 +617,31 @@ class EditNode extends EditRecord
|
|||||||
protected function afterSave(): void
|
protected function afterSave(): void
|
||||||
{
|
{
|
||||||
$this->fillForm();
|
$this->fillForm();
|
||||||
|
|
||||||
|
/** @var Node $node */
|
||||||
|
$node = $this->record;
|
||||||
|
|
||||||
|
$changed = collect($node->getChanges())->except(['updated_at', 'name', 'tags', 'public', 'maintenance_mode', 'memory', 'memory_overallocate', 'disk', 'disk_overallocate', 'cpu', 'cpu_overallocate'])->all();
|
||||||
|
|
||||||
|
try {
|
||||||
|
if ($changed) {
|
||||||
|
$this->daemonConfigurationRepository->setNode($node)->update($node);
|
||||||
|
}
|
||||||
|
parent::getSavedNotification()?->send();
|
||||||
|
} catch (ConnectionException) {
|
||||||
|
Notification::make()
|
||||||
|
->title(trans('admin/node.error_connecting', ['node' => $node->name]))
|
||||||
|
->body(trans('admin/node.error_connecting_description'))
|
||||||
|
->color('warning')
|
||||||
|
->icon('tabler-database')
|
||||||
|
->warning()
|
||||||
|
->send();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getSavedNotification(): ?Notification
|
||||||
|
{
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function getColumnSpan(): ?int
|
protected function getColumnSpan(): ?int
|
||||||
|
@ -34,6 +34,7 @@ use Filament\Forms;
|
|||||||
use Filament\Forms\Components\Actions as FormActions;
|
use Filament\Forms\Components\Actions as FormActions;
|
||||||
use Filament\Forms\Components\Actions\Action;
|
use Filament\Forms\Components\Actions\Action;
|
||||||
use Filament\Forms\Components\CheckboxList;
|
use Filament\Forms\Components\CheckboxList;
|
||||||
|
use Filament\Forms\Components\Component;
|
||||||
use Filament\Forms\Components\Fieldset;
|
use Filament\Forms\Components\Fieldset;
|
||||||
use Filament\Forms\Components\Grid;
|
use Filament\Forms\Components\Grid;
|
||||||
use Filament\Forms\Components\Hidden;
|
use Filament\Forms\Components\Hidden;
|
||||||
@ -53,7 +54,6 @@ use Filament\Forms\Set;
|
|||||||
use Filament\Notifications\Notification;
|
use Filament\Notifications\Notification;
|
||||||
use Filament\Resources\Pages\EditRecord;
|
use Filament\Resources\Pages\EditRecord;
|
||||||
use Illuminate\Database\Eloquent\Builder;
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
|
||||||
use Illuminate\Http\Client\ConnectionException;
|
use Illuminate\Http\Client\ConnectionException;
|
||||||
use Illuminate\Support\Arr;
|
use Illuminate\Support\Arr;
|
||||||
use Illuminate\Support\Facades\Validator;
|
use Illuminate\Support\Facades\Validator;
|
||||||
@ -65,8 +65,6 @@ class EditServer extends EditRecord
|
|||||||
{
|
{
|
||||||
protected static string $resource = ServerResource::class;
|
protected static string $resource = ServerResource::class;
|
||||||
|
|
||||||
private bool $errored = false;
|
|
||||||
|
|
||||||
private DaemonServerRepository $daemonServerRepository;
|
private DaemonServerRepository $daemonServerRepository;
|
||||||
|
|
||||||
public function boot(DaemonServerRepository $daemonServerRepository): void
|
public function boot(DaemonServerRepository $daemonServerRepository): void
|
||||||
@ -920,6 +918,7 @@ class EditServer extends EditRecord
|
|||||||
->label(trans('admin/server.transfer'))
|
->label(trans('admin/server.transfer'))
|
||||||
->disabled(fn (Server $server) => Node::count() <= 1 || $server->isInConflictState())
|
->disabled(fn (Server $server) => Node::count() <= 1 || $server->isInConflictState())
|
||||||
->modalheading(trans('admin/server.transfer'))
|
->modalheading(trans('admin/server.transfer'))
|
||||||
|
->form($this->transferServer())
|
||||||
->action(function (TransferServerService $transfer, Server $server, $data) {
|
->action(function (TransferServerService $transfer, Server $server, $data) {
|
||||||
try {
|
try {
|
||||||
$transfer->handle($server, Arr::get($data, 'node_id'), Arr::get($data, 'allocation_id'), Arr::get($data, 'allocation_additional', []));
|
$transfer->handle($server, Arr::get($data, 'node_id'), Arr::get($data, 'allocation_id'), Arr::get($data, 'allocation_additional', []));
|
||||||
@ -935,33 +934,7 @@ class EditServer extends EditRecord
|
|||||||
->danger()
|
->danger()
|
||||||
->send();
|
->send();
|
||||||
}
|
}
|
||||||
})
|
}),
|
||||||
->form([
|
|
||||||
Select::make('node_id')
|
|
||||||
->label(trans('admin/server.node'))
|
|
||||||
->prefixIcon('tabler-server-2')
|
|
||||||
->selectablePlaceholder(false)
|
|
||||||
->default(fn (Server $server) => Node::whereNot('id', $server->node->id)->first()?->id)
|
|
||||||
->required()
|
|
||||||
->live()
|
|
||||||
->options(fn (Server $server) => Node::whereNot('id', $server->node->id)->pluck('name', 'id')->all()),
|
|
||||||
Select::make('allocation_id')
|
|
||||||
->label(trans('admin/server.primary_allocation'))
|
|
||||||
->required()
|
|
||||||
->prefixIcon('tabler-network')
|
|
||||||
->disabled(fn (Get $get) => !$get('node_id'))
|
|
||||||
->options(fn (Get $get) => Allocation::where('node_id', $get('node_id'))->whereNull('server_id')->get()->mapWithKeys(fn (Allocation $allocation) => [$allocation->id => $allocation->address]))
|
|
||||||
->searchable(['ip', 'port', 'ip_alias'])
|
|
||||||
->placeholder(trans('admin/server.select_allocation')),
|
|
||||||
Select::make('allocation_additional')
|
|
||||||
->label(trans('admin/server.additional_allocations'))
|
|
||||||
->multiple()
|
|
||||||
->prefixIcon('tabler-network')
|
|
||||||
->disabled(fn (Get $get) => !$get('node_id'))
|
|
||||||
->options(fn (Get $get) => Allocation::where('node_id', $get('node_id'))->whereNull('server_id')->when($get('allocation_id'), fn ($query) => $query->whereNot('id', $get('allocation_id')))->get()->mapWithKeys(fn (Allocation $allocation) => [$allocation->id => $allocation->address]))
|
|
||||||
->searchable(['ip', 'port', 'ip_alias'])
|
|
||||||
->placeholder(trans('admin/server.select_additional')),
|
|
||||||
]),
|
|
||||||
])->fullWidth(),
|
])->fullWidth(),
|
||||||
ToggleButtons::make('')
|
ToggleButtons::make('')
|
||||||
->hint(new HtmlString(trans('admin/server.transfer_help'))),
|
->hint(new HtmlString(trans('admin/server.transfer_help'))),
|
||||||
@ -1005,17 +978,35 @@ class EditServer extends EditRecord
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function transferServer(Form $form): Form
|
/** @return Component[] */
|
||||||
|
protected function transferServer(): array
|
||||||
{
|
{
|
||||||
return $form
|
return [
|
||||||
->columns()
|
Select::make('node_id')
|
||||||
->schema([
|
->label(trans('admin/server.node'))
|
||||||
Select::make('toNode')
|
->prefixIcon('tabler-server-2')
|
||||||
->label('New Node'),
|
->selectablePlaceholder(false)
|
||||||
TextInput::make('newAllocation')
|
->default(fn (Server $server) => Node::whereNot('id', $server->node->id)->first()?->id)
|
||||||
->label('Allocation'),
|
->required()
|
||||||
]);
|
->live()
|
||||||
|
->options(fn (Server $server) => Node::whereNot('id', $server->node->id)->pluck('name', 'id')->all()),
|
||||||
|
Select::make('allocation_id')
|
||||||
|
->label(trans('admin/server.primary_allocation'))
|
||||||
|
->required()
|
||||||
|
->prefixIcon('tabler-network')
|
||||||
|
->disabled(fn (Get $get) => !$get('node_id'))
|
||||||
|
->options(fn (Get $get) => Allocation::where('node_id', $get('node_id'))->whereNull('server_id')->get()->mapWithKeys(fn (Allocation $allocation) => [$allocation->id => $allocation->address]))
|
||||||
|
->searchable(['ip', 'port', 'ip_alias'])
|
||||||
|
->placeholder(trans('admin/server.select_allocation')),
|
||||||
|
Select::make('allocation_additional')
|
||||||
|
->label(trans('admin/server.additional_allocations'))
|
||||||
|
->multiple()
|
||||||
|
->prefixIcon('tabler-network')
|
||||||
|
->disabled(fn (Get $get) => !$get('node_id'))
|
||||||
|
->options(fn (Get $get) => Allocation::where('node_id', $get('node_id'))->whereNull('server_id')->when($get('allocation_id'), fn ($query) => $query->whereNot('id', $get('allocation_id')))->get()->mapWithKeys(fn (Allocation $allocation) => [$allocation->id => $allocation->address]))
|
||||||
|
->searchable(['ip', 'port', 'ip_alias'])
|
||||||
|
->placeholder(trans('admin/server.select_additional')),
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function getHeaderActions(): array
|
protected function getHeaderActions(): array
|
||||||
@ -1093,39 +1084,32 @@ class EditServer extends EditRecord
|
|||||||
return $data;
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function handleRecordUpdate(Model $record, array $data): Model
|
protected function afterSave(): void
|
||||||
{
|
{
|
||||||
if (!$record instanceof Server) {
|
/** @var Server $server */
|
||||||
return $record;
|
$server = $this->record;
|
||||||
}
|
|
||||||
|
|
||||||
/** @var Server $record */
|
$changed = collect($server->getChanges())->except(['updated_at', 'name', 'owner_id', 'condition', 'description', 'external_id', 'tags', 'cpu_pinning', 'allocation_limit', 'database_limit', 'backup_limit', 'skip_scripts'])->all();
|
||||||
$record = parent::handleRecordUpdate($record, $data);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$this->daemonServerRepository->setServer($record)->sync();
|
if ($changed) {
|
||||||
|
$this->daemonServerRepository->setServer($server)->sync();
|
||||||
|
}
|
||||||
|
parent::getSavedNotification()?->send();
|
||||||
} catch (ConnectionException) {
|
} catch (ConnectionException) {
|
||||||
$this->errored = true;
|
|
||||||
|
|
||||||
Notification::make()
|
Notification::make()
|
||||||
->title(trans('admin/server.notifications.error_connecting', ['node' => $record->node->name]))
|
->title(trans('admin/server.notifications.error_connecting', ['node' => $server->node->name]))
|
||||||
->body(trans('admin/server.notifications.error_connecting_description'))
|
->body(trans('admin/server.notifications.error_connecting_description'))
|
||||||
->color('warning')
|
->color('warning')
|
||||||
->icon('tabler-database')
|
->icon('tabler-database')
|
||||||
->warning()
|
->warning()
|
||||||
->send();
|
->send();
|
||||||
}
|
}
|
||||||
|
|
||||||
return $record;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function getSavedNotification(): ?Notification
|
protected function getSavedNotification(): ?Notification
|
||||||
{
|
{
|
||||||
if ($this->errored) {
|
return null;
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return parent::getSavedNotification();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getRelationManagers(): array
|
public function getRelationManagers(): array
|
||||||
|
Loading…
x
Reference in New Issue
Block a user