'use client'; import { useEffect } from 'react'; import { useAdminTabStore, isAdminTab } from '@/stores/admin-tab-store'; import { DashboardTab } from './_tabs/dashboard'; import { SettingsTab } from './_tabs/settings'; import { BrandingTab } from './_tabs/branding'; import { AuthTab } from './_tabs/auth'; import { PolicyTab } from './_tabs/policy'; import { AiPolicyTab } from './_tabs/ai-policy'; import { PluginsTab } from './_tabs/plugins'; import { ThemesTab } from './_tabs/themes'; import { MarketplaceTab } from './_tabs/marketplace'; import { VersionTab } from './_tabs/version'; import { TelemetryTab } from './_tabs/telemetry'; import { LogsTab } from './_tabs/logs'; import { VncDirectoryTab } from './_tabs/vncdirectory'; export default function AdminPage() { const activeTab = useAdminTabStore((s) => s.activeTab); const setActiveTab = useAdminTabStore((s) => s.setActiveTab); // Honour deep links from the old route structure: /admin?tab=settings // (emitted by the redirect pages in /admin//page.tsx) sets the store // once on mount, then strips the param so the URL stays at /admin and // subsequent tab clicks don't accumulate query strings. useEffect(() => { if (typeof window === 'undefined') return; const url = new URL(window.location.href); const fromUrl = url.searchParams.get('tab'); if (isAdminTab(fromUrl)) { setActiveTab(fromUrl); url.searchParams.delete('tab'); window.history.replaceState(null, '', url.pathname + url.search + url.hash); } }, [setActiveTab]); switch (activeTab) { case 'dashboard': return ; case 'settings': return ; case 'branding': return ; case 'auth': return ; case 'policy': return ; case 'ai-policy': return ; case 'plugins': return ; case 'themes': return ; case 'marketplace': return ; case 'version': return ; case 'telemetry': return ; case 'logs': return ; case 'vncdirectory': return ; } }