import { useParams, useNavigate } from 'react-router'; import { useQuery } from '@tanstack/react-query'; import { useTranslation } from 'react-i18next'; import { adminRemnawaveApi, SquadWithLocalInfo } from '../api/adminRemnawave'; import { AdminBackButton } from '../components/admin'; import { ServerIcon, UsersIcon, CheckIcon, XIcon } from '../components/icons'; import Twemoji from 'react-twemoji'; import { getFlagEmoji } from '../utils/subscriptionHelpers'; // Country flag helper. Алгоритмический ISO 3166-1 alpha-2 → regional indicator, // чтобы не плодить хардкод-словари (исторически у каждого экрана был свой // неполный, и EE/MX/AR не покрывались). При отсутствии кода — глобус. const getCountryFlag = (code: string | null | undefined): string => getFlagEmoji(code) || '🌍'; export default function AdminRemnawaveSquadDetail() { const { t } = useTranslation(); const { uuid } = useParams<{ uuid: string }>(); const navigate = useNavigate(); // Fetch all squads and find the one we need const { data: squadsData, isLoading, error, } = useQuery({ queryKey: ['admin-remnawave-squads'], queryFn: adminRemnawaveApi.getSquads, }); const squad: SquadWithLocalInfo | undefined = squadsData?.items?.find( (s: SquadWithLocalInfo) => s.uuid === uuid, ); if (isLoading) { return (
{t('admin.remnawave.squads.loadError', 'Failed to load squad')}
{squad.name}
UUID
{squad.uuid}
{t('admin.remnawave.squads.originalName', 'Original Name')}
{squad.name}
{t('admin.remnawave.squads.countryCode', 'Country')}
{getCountryFlag(squad.country_code)} {squad.country_code || '—'}
{squad.members_count}
{squad.inbounds_count}
{squad.current_users ?? 0} {' '} / {squad.max_users ?? '∞'}
{((squad.price_kopeks ?? 0) / 100).toFixed(0)} ₽
{t('admin.remnawave.squads.available', 'Available')}
{squad.is_available ? t('common.yes', 'Yes') : t('common.no', 'No')}
{t('admin.remnawave.squads.trialEligible', 'Trial Eligible')}
{squad.is_trial_eligible ? t('common.yes', 'Yes') : t('common.no', 'No')}