import { useNavigate } from 'react-router'; 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 { usePlatform } from '../platform/hooks/usePlatform'; import Twemoji from 'react-twemoji'; // BackIcon const BackIcon = () => ( ); // Country flags (simple emoji mapping) import { getFlagEmoji as getCountryFlag } from '../utils/subscriptionHelpers'; export default function AdminServers() { const { t } = useTranslation(); const navigate = useNavigate(); const queryClient = useQueryClient(); const { capabilities } = usePlatform(); // 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 */}
))}
)}
); }