import React from 'react'; import { NavLink, useLocation } from 'react-router-dom'; import { LayoutDashboard, Calendar, Mail, Archive, BarChart3, Settings, X, Palette, FileText, HardDrive } from 'lucide-react'; import { useQuery } from '@tanstack/react-query'; import { useTranslation } from 'react-i18next'; import { settingsService } from '../../services/settings.service'; import { VersionInfo } from './VersionInfo'; interface AdminSidebarProps { isOpen: boolean; onClose: () => void; } interface NavItem { nameKey: string; href: string; icon: React.ComponentType<{ className?: string }>; } const navigation: NavItem[] = [ { nameKey: 'navigation.dashboard', href: '/admin/dashboard', icon: LayoutDashboard }, { nameKey: 'navigation.events', href: '/admin/events', icon: Calendar }, { nameKey: 'navigation.archives', href: '/admin/archives', icon: Archive }, { nameKey: 'admin.analytics', href: '/admin/analytics', icon: BarChart3 }, { nameKey: 'navigation.emailSettings', href: '/admin/email', icon: Mail }, { nameKey: 'navigation.branding', href: '/admin/branding', icon: Palette }, { nameKey: 'navigation.settings', href: '/admin/settings', icon: Settings }, { nameKey: 'navigation.backup', href: '/admin/backup', icon: HardDrive }, { nameKey: 'navigation.cmsPages', href: '/admin/cms', icon: FileText }, ]; export const AdminSidebar: React.FC = ({ isOpen, onClose }) => { const location = useLocation(); const { t } = useTranslation(); return (
{/* Brand */}
{t('admin.title')}
{/* Navigation */} {/* Bottom section - sticky to bottom */}
{/* Version Info */} {/* Storage Info */}
); }; const StorageInfo: React.FC = () => { const { t } = useTranslation(); const { data: storageInfo } = useQuery({ queryKey: ['storage-info'], queryFn: () => settingsService.getStorageInfo(), refetchInterval: 60000 // Refresh every minute }); if (!storageInfo) { return (
); } const usagePercent = Math.round((storageInfo.total_used / storageInfo.storage_limit) * 100); return (
{t('admin.storageUsed')} {settingsService.formatBytes(storageInfo.total_used)}

{t('admin.storagePercent', { percent: usagePercent, limit: settingsService.formatBytes(storageInfo.storage_limit) })}

); };