diff --git a/frontend/src/components/ProxmoxPanel.jsx b/frontend/src/components/ProxmoxPanel.jsx index bd3a597..edd874c 100644 --- a/frontend/src/components/ProxmoxPanel.jsx +++ b/frontend/src/components/ProxmoxPanel.jsx @@ -9,6 +9,7 @@ import { X, Cpu, MemoryStick, HardDrive, Clock, Network, Server, Monitor, Container, Database, FolderTree, Settings, Download, Trash2, Copy, Check, MonitorSmartphone, Terminal, Cable, ExternalLink, Plus, Unplug, Search, Shield, Play, FileCode, + LayoutGrid, Archive, GitBranch, Wrench, RefreshCw, CalendarClock, Bot, } from 'lucide-react' const mainCategories = [ @@ -20,21 +21,21 @@ const mainCategories = [ const buildSubTabs = (hasPBS) => ({ virtualisierung: [ - { id: 'vms', label: 'VMs' }, - { id: 'containers', label: 'Container' }, + { id: 'vms', label: 'VMs', icon: Monitor }, + { id: 'containers', label: 'Container', icon: Container }, ], speicher: [ - { id: 'storage', label: 'Storage' }, - { id: 'zfs', label: 'ZFS' }, - { id: 'backups', label: 'Backups' }, - ...(hasPBS ? [{ id: 'pbs', label: 'Backup Server' }] : []), + { id: 'storage', label: 'Storage', icon: HardDrive }, + { id: 'zfs', label: 'ZFS', icon: Database }, + { id: 'backups', label: 'Backups', icon: Archive }, + ...(hasPBS ? [{ id: 'pbs', label: 'Backup Server', icon: Server }] : []), ], system: [ - { id: 'services', label: 'Dienste' }, - { id: 'updates', label: 'Updates' }, - { id: 'tasks', label: 'Aufgaben' }, - { id: 'tunnel', label: 'Tunnel' }, - { id: 'agent', label: 'Agent' }, + { id: 'services', label: 'Dienste', icon: Settings }, + { id: 'updates', label: 'Updates', icon: RefreshCw }, + { id: 'tasks', label: 'Aufgaben', icon: CalendarClock }, + { id: 'tunnel', label: 'Tunnel', icon: Cable }, + { id: 'agent', label: 'Agent', icon: Bot }, ], }) @@ -132,15 +133,15 @@ export default function ProxmoxPanel({ agentId, customers, onClose, onReload }) {/* Haupt-Tabs */} -
+
{mainCategories.map((cat) => (
- {/* Sub-Tabs */} - {currentSubs.length > 0 && ( -
- - {mainCategories.find(c => c.id === mainTab)?.label} - - {currentSubs.map((s) => ( - - ))} -
- )} + {/* Content + optionale Sidebar */} +
- {/* Content */} -
- {renderContent()} + {/* Sub-Navigation links — nur wenn nicht Uebersicht */} + {mainTab !== 'uebersicht' && currentSubs.length > 0 && ( +
+
+ + {mainCategories.find(c => c.id === mainTab)?.label} + +
+ {currentSubs.map((item) => { + const Icon = item.icon + const isActive = activeSubTab === item.id + return ( + + ) + })} +
+ )} + + {/* Hauptinhalt */} +
+ {renderContent()} +
)