import { useState, useEffect } from 'react'; import { stats as statsApi } from '../api'; type Panel = 'subscriptions' | 'static-nodes' | 'node-selector' | 'rules' | 'output'; const NAV_ITEMS: { key: Panel; label: string; icon: string }[] = [ { key: 'subscriptions', label: '订阅', icon: '⟐' }, { key: 'static-nodes', label: '节点', icon: '◈' }, { key: 'node-selector', label: '选择', icon: '☰' }, { key: 'rules', label: '规则', icon: '⧖' }, { key: 'output', label: '输出', icon: '▸' }, ]; interface LayoutProps { activePanel: Panel; onPanelChange: (panel: Panel) => void; children: React.ReactNode; } export default function Layout({ activePanel, onPanelChange, children }: LayoutProps) { const [statsData, setStatsData] = useState(null); useEffect(() => { const load = () => statsApi.get().then(setStatsData).catch(() => {}); load(); const interval = setInterval(load, 10000); return () => clearInterval(interval); }, []); const totalNodes = statsData ? statsData.nodes.fetched.enabled + statsData.nodes.static.enabled : 0; const totalNodesAll = statsData ? statsData.nodes.fetched.total + statsData.nodes.static.total : 0; return (
{/* Header */}
Sub Router
v1.0.0
{/* Main */}
{/* Sidebar */} {/* Content */}
{children}
{/* Status bar */}
); } export type { Panel };