feat: open console in new tab instead of iframe panel
- Remove ConsolePanel and /api/vnc route (iframe session auth won't work cross-origin) - VMList/LXCList console buttons now open Proxmox web UI console in new tab - Use web UI console URL format so browser session cookies handle auth automatically - Add resize=scale and xtermjs=1 for better terminal UX Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -6,7 +6,6 @@ import NodeList from './NodeList';
|
||||
import VMList from './VMList';
|
||||
import LXCList from './LXCList';
|
||||
import axios from 'axios';
|
||||
import ConsolePanel from './ConsolePanel';
|
||||
|
||||
const POLL_INTERVAL = Number(process.env.NEXT_PUBLIC_API_POLL_INTERVAL || 30000);
|
||||
|
||||
@@ -29,7 +28,6 @@ async function fetchData(url) {
|
||||
/** @returns {import('react').ReactNode} */
|
||||
export default function Dashboard() {
|
||||
const [activeTab, setActiveTab] = useState('nodes');
|
||||
const [activeConsole, setActiveConsole] = useState(null);
|
||||
const [powerActionStatus, setPowerActionStatus] = useState(null);
|
||||
|
||||
const handlePowerAction = async (node, vmid, type, action) => {
|
||||
@@ -90,9 +88,12 @@ export default function Dashboard() {
|
||||
{ id: 'nodes', label: 'Nodes' },
|
||||
{ id: 'vms', label: 'VMs' },
|
||||
{ id: 'lxc', label: 'LXCs' },
|
||||
...(activeConsole ? [{ id: 'console', label: `Console: ${activeConsole.name}` }] : []),
|
||||
];
|
||||
|
||||
const handleOpenConsole = (vm) => {
|
||||
window.open(vm.consoleUrl, '_blank');
|
||||
};
|
||||
|
||||
return (
|
||||
<div className="min-h-screen p-4 sm:p-6 lg:p-8">
|
||||
{/* Header */}
|
||||
@@ -167,11 +168,8 @@ export default function Dashboard() {
|
||||
{/* Tab content */}
|
||||
<div>
|
||||
{activeTab === 'nodes' && <NodeList nodes={nodes} />}
|
||||
{activeTab === 'vms' && <VMList vms={vms} onPowerAction={handlePowerAction} onOpenConsole={(vm) => { setActiveConsole(vm); setActiveTab('console'); }} />}
|
||||
{activeTab === 'lxc' && <LXCList lxc={lxc} onPowerAction={handlePowerAction} onOpenConsole={(lxc) => { setActiveConsole(lxc); setActiveTab('console'); }} />}
|
||||
{activeTab === 'console' && activeConsole && (
|
||||
<ConsolePanel vm={activeConsole} onClose={() => setActiveConsole(null)} />
|
||||
)}
|
||||
{activeTab === 'vms' && <VMList vms={vms} onPowerAction={handlePowerAction} onOpenConsole={handleOpenConsole} />}
|
||||
{activeTab === 'lxc' && <LXCList lxc={lxc} onPowerAction={handlePowerAction} onOpenConsole={handleOpenConsole} />}
|
||||
</div>
|
||||
|
||||
{/* Footer */}
|
||||
|
||||
Reference in New Issue
Block a user