import { useNavigate } from 'react-router-dom'; import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { useTranslation } from 'react-i18next'; import { serversApi, ServerListItem } from '../api/servers'; import { SyncIcon, EditIcon, CheckIcon, XIcon, UsersIcon, GiftIcon } from '../components/icons'; import { useBackButton } from '../platform/hooks/useBackButton'; import { usePlatform } from '../platform/hooks/usePlatform'; // BackIcon const BackIcon = () => ( ); // Country flags (simple emoji mapping) const getCountryFlag = (code: string | null): string => { if (!code) return ''; const codeMap: Record = { RU: '🇷🇺', US: '🇺🇸', DE: '🇩🇪', NL: '🇳🇱', GB: '🇬🇧', FR: '🇫🇷', FI: '🇫🇮', SE: '🇸🇪', PL: '🇵🇱', CZ: '🇨🇿', AT: '🇦🇹', CH: '🇨🇭', UA: '🇺🇦', KZ: '🇰🇿', JP: '🇯🇵', KR: '🇰🇷', SG: '🇸🇬', HK: '🇭🇰', CA: '🇨🇦', AU: '🇦🇺', BR: '🇧🇷', IN: '🇮🇳', TR: '🇹🇷', IL: '🇮🇱', AE: '🇦🇪', }; return codeMap[code.toUpperCase()] || code; }; export default function AdminServers() { const { t } = useTranslation(); const navigate = useNavigate(); const queryClient = useQueryClient(); const { capabilities } = usePlatform(); // Use native Telegram back button in Mini App useBackButton(() => navigate('/admin')); // Queries const { data: serversData, isLoading } = useQuery({ queryKey: ['admin-servers'], queryFn: () => serversApi.getServers(true), }); // Mutations const toggleMutation = useMutation({ mutationFn: serversApi.toggleServer, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['admin-servers'] }); }, }); const toggleTrialMutation = useMutation({ mutationFn: serversApi.toggleTrial, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['admin-servers'] }); }, }); const syncMutation = useMutation({ mutationFn: serversApi.syncServers, onSuccess: (result) => { queryClient.invalidateQueries({ queryKey: ['admin-servers'] }); alert(result.message); }, }); const servers = serversData?.servers || []; return (
{/* Header */}
{/* Show back button only on web, not in Telegram Mini App */} {!capabilities.hasBackButton && ( )}

{t('admin.servers.title')}

{t('admin.servers.subtitle')}

{/* Servers List */} {isLoading ? (
) : servers.length === 0 ? (

{t('admin.servers.noServers')}

) : (
{servers.map((server: ServerListItem) => (
{getCountryFlag(server.country_code)}

{server.display_name}

{server.is_trial_eligible && ( {t('admin.servers.trial')} )} {!server.is_available && ( {t('admin.servers.unavailable')} )} {server.is_full && ( {t('admin.servers.full')} )}
{server.current_users} {server.max_users ? ` / ${server.max_users}` : ''} {server.price_rubles} ₽ {server.squad_uuid}
{/* Toggle Available */} {/* Toggle Trial */} {/* Edit */}
))}
)}
); }