XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEServerManager

【Java】我的世界XFE服务器管理器

公开
关注 0 Fork 0 Star 0
UTF-8
import { useEffect } from 'react';
import { LockKeyhole } from 'lucide-react';
import { AppShell, useRoute } from './components/app-shell';
import { EmptyState, PageHeader, Panel } from './components/ui';
import { useServer } from './context/server-context';
import { useI18n } from './lib/i18n';
import { canAccessRoute } from './lib/permissions';
import { AuditPage } from './pages/audit';
import { ClaimsPage } from './pages/claims';
import { ConsolePage } from './pages/console';
import { EconomyPage } from './pages/economy';
import { LoginPage } from './pages/login';
import { ModerationPage } from './pages/moderation';
import { MaintenancePage } from './pages/maintenance';
import { TriggersPage } from './pages/triggers';
import { MenusPage } from './pages/menus';
import { OverviewPage } from './pages/overview';
import { PlayersPage } from './pages/players';
import { PoliciesPage } from './pages/policies';
import { RollbackPage } from './pages/rollback';
import { SettingsPage } from './pages/settings';

const pages = {
  overview: OverviewPage,
  players: PlayersPage,
  economy: EconomyPage,
  triggers: TriggersPage,
  menus: MenusPage,
  policies: PoliciesPage,
  audit: AuditPage,
  console: ConsolePage,
  settings: SettingsPage,
  moderation: ModerationPage,
  maintenance: MaintenancePage,
  claims: ClaimsPage,
  rollback: RollbackPage,
};

export function App() {
  const [route, navigate] = useRoute();
  const { session } = useServer();
  const { t } = useI18n();
  const Page = pages[route];
  useEffect(() => {
    document.title = `XFEServerManager · ${route}`;
  }, [route]);
  if (session?.authenticated === false) return <LoginPage />;
  const denied = session?.authenticated === true && !canAccessRoute(session.actor, route);
  return <AppShell route={route} navigate={navigate}>{denied ? (
    <div className="page">
      <PageHeader title={t('access.title')} description={t('access.description')} />
      <Panel><EmptyState icon={<LockKeyhole />} title={t('access.title')} detail={t('access.detail')} /></Panel>
    </div>
  ) : <Page />}</AppShell>;
}