feat: implement drag-and-drop functionality for reordering firewall rules in Proxmox view

This commit is contained in:
2025-12-04 11:25:35 -05:00
parent 33144e96ae
commit 7b1bfe8b23
2 changed files with 182 additions and 32 deletions

View File

@@ -481,6 +481,54 @@ class Firewall extends Component
}
}
public function reorderRules(int $fromPos, int $toPos): void
{
try {
// Proxmox API uses PUT with moveto parameter to reorder rules
$response = $this->firewallRequest(
'/nodes/' . $this->server->node->name . '/qemu/' . $this->server->vm_id . '/firewall/rules/' . $fromPos,
'put',
['moveto' => $toPos]
);
if ($response->successful()) {
$this->notify('Rule reordered successfully', 'success');
$this->loadFirewallRules();
} else {
$message = $response->json()['errors'][0]['message'] ?? 'Unknown error';
$this->error = 'Failed to reorder rule: ' . $message;
$this->showErrorModal = true;
\Log::error('Failed to reorder firewall rule', [
'from' => $fromPos,
'to' => $toPos,
'response' => $response->json()
]);
}
} catch (\Exception $e) {
$errorMessage = $e->getMessage();
if (method_exists($e, 'response') && $e->response()) {
try {
$errorData = $e->response()->json();
if (isset($errorData['errors']) && is_array($errorData['errors']) && !empty($errorData['errors'])) {
$errorMessage = $errorData['errors'][0]['message'] ?? $errorMessage;
} elseif (isset($errorData['message'])) {
$errorMessage = $errorData['message'];
}
} catch (\Exception $jsonError) {
// Response might not be JSON
}
}
$this->error = 'Failed to reorder rule: ' . $errorMessage;
$this->showErrorModal = true;
\Log::error('Exception reordering firewall rule', [
'from' => $fromPos,
'to' => $toPos,
'error' => $e->getMessage(),
'trace' => $e->getTraceAsString()
]);
}
}
public function loadAliases(): void
{
try {