import { useState, useEffect } from 'react'; import { useParams, useNavigate } from 'react-router-dom'; import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { useTranslation } from 'react-i18next'; import { serversApi, ServerUpdateRequest } from '../api/servers'; import { AdminBackButton } from '../components/admin'; import { ServerIcon } from '../components/icons'; import { createNumberInputHandler, toNumber } from '../utils/inputHelpers'; import { useBackButton } from '../platform/hooks/useBackButton'; // 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 AdminServerEdit() { const { t } = useTranslation(); const { id } = useParams<{ id: string }>(); const navigate = useNavigate(); const queryClient = useQueryClient(); const serverId = parseInt(id || '0'); useBackButton(() => navigate('/admin/servers')); const { data: server, isLoading, error, } = useQuery({ queryKey: ['admin-server', serverId], queryFn: () => serversApi.getServer(serverId), enabled: serverId > 0, }); const [displayName, setDisplayName] = useState(''); const [description, setDescription] = useState(''); const [countryCode, setCountryCode] = useState(''); const [priceKopeks, setPriceKopeks] = useState(0); const [maxUsers, setMaxUsers] = useState(null); const [sortOrder, setSortOrder] = useState(0); useEffect(() => { if (server) { setDisplayName(server.display_name); setDescription(server.description || ''); setCountryCode(server.country_code || ''); setPriceKopeks(server.price_kopeks); setMaxUsers(server.max_users); setSortOrder(server.sort_order); } }, [server]); const updateMutation = useMutation({ mutationFn: (data: ServerUpdateRequest) => serversApi.updateServer(serverId, data), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['admin-servers'] }); queryClient.invalidateQueries({ queryKey: ['admin-server', serverId] }); navigate('/admin/servers'); }, }); const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); const data: ServerUpdateRequest = { display_name: displayName, description: description || undefined, country_code: countryCode || undefined, price_kopeks: toNumber(priceKopeks), max_users: maxUsers || undefined, sort_order: toNumber(sortOrder), }; updateMutation.mutate(data); }; if (isLoading) { return (
); } if (error || !server) { return (

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

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

); } return (
{/* Header */}
{getCountryFlag(server.country_code)}

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

{server.display_name}

{/* Main Settings */}

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

{/* Original Name (readonly) */}
{server.original_name || server.squad_uuid}
{/* Display Name */}
setDisplayName(e.target.value)} className="input" placeholder={t('admin.servers.displayNamePlaceholder')} />
{/* Description */}