feat: Update Proxmox extension with various improvements and bug fixes

- Change listStates method to accept nullable integer for limit parameter.
- Modify TechnitiumDns class to return structured error messages on failure.
- Enhance VNC and xterm popup routes with user authorization checks.
- Update backups view to improve loading states and add unique keys for dynamic elements.
- Refactor cloud-init view to ensure proper data binding and improve user experience.
- Add wire:key attributes to various elements in views for better Livewire performance.
- Improve error handling and user feedback in the firewall view.
- Update server overview and statistics views to handle potential null values gracefully.
- Add new migration files to extend database schema with user-set icons and notes for Proxmox nodes.
This commit is contained in:
2026-02-23 17:23:01 -05:00
parent 9aff64be93
commit f394483daa
48 changed files with 442 additions and 268 deletions

View File

@@ -92,8 +92,7 @@
</div>
<div class="grid grid-cols-1 xl:grid-cols-2 gap-6">
<div class="bg-background-secondary border border-neutral rounded-lg p-4 space-y-4"
x-data="{ showNetworkModal: @entangle('showNetworkModal') }">
<div class="bg-background-secondary border border-neutral rounded-lg p-4 space-y-4">
<div class="flex items-center justify-between">
<div>
<div class="flex items-center gap-2 min-w-0">
@@ -279,14 +278,14 @@
<div>
<label class="text-xs font-semibold text-base/70">New Password</label>
<input type="password"
wire:model.defer="password"
wire:model="password"
class="form-input w-full mt-1"
placeholder="Enter new password" />
</div>
<div>
<label class="text-xs font-semibold text-base/70">Confirm Password</label>
<input type="password"
wire:model.defer="password_confirmation"
wire:model="password_confirmation"
class="form-input w-full mt-1"
placeholder="Confirm password" />
</div>
@@ -316,7 +315,7 @@
<label class="text-sm font-semibold text-base/80">SSH Public Keys</label>
<div class="space-y-2">
@forelse($sshKeys as $keyIndex => $key)
<div class="flex items-center gap-2 border border-neutral rounded-md bg-background px-3 py-2 text-xs text-base/70 relative"
<div wire:key="ssh-key-{{ $keyIndex }}-{{ md5($key) }}" class="flex items-center gap-2 border border-neutral rounded-md bg-background px-3 py-2 text-xs text-base/70 relative"
x-data="{
showKeyModal: false,
copied: false,
@@ -393,7 +392,7 @@
</div>
<div class="space-y-2">
<label class="text-xs font-semibold text-base/70">SSH Key</label>
<textarea wire:model.defer="newSshKey"
<textarea wire:model="newSshKey"
class="form-input w-full h-28 resize-y"
placeholder="ssh-ed25519 AAAA... user@host"></textarea>
</div>
@@ -470,7 +469,7 @@
<div class="grid grid-cols-1 gap-4">
@foreach($networks as $index => $network)
<div class="flex flex-col gap-3 border border-neutral rounded-lg bg-background px-3 py-3">
<div wire:key="network-{{ $network['key'] }}" class="flex flex-col gap-3 border border-neutral rounded-lg bg-background px-3 py-3">
<div class="flex items-center justify-between">
<div>
<span class="text-sm font-semibold text-base/80 uppercase">{{ $network['key'] }}</span>
@@ -686,7 +685,7 @@
<label class="text-sm font-semibold text-base/80">DNS Nameservers</label>
<div class="space-y-2">
@forelse($dnsServers as $dnsIndex => $resolver)
<div class="flex items-center gap-2 border border-neutral rounded-md bg-background px-3 py-2 text-xs text-base/70">
<div wire:key="dns-{{ $dnsIndex }}-{{ md5($resolver) }}" class="flex items-center gap-2 border border-neutral rounded-md bg-background px-3 py-2 text-xs text-base/70">
<span class="truncate flex-1" title="{{ $resolver }}">{{ $resolver }}</span>
<button type="button" wire:click="removeDnsServer({{ $dnsIndex }})"
class="text-error hover:text-error/80 ml-2">
@@ -781,7 +780,7 @@
<div class="space-y-2">
<label class="text-xs font-semibold text-base/70">Nameserver</label>
<input type="text"
wire:model.defer="newDnsServer"
wire:model="newDnsServer"
class="form-input w-full"
placeholder="1.1.1.1 or 2606:4700:4700::1111" />
</div>