import { useState } from 'react'; import { useTranslation } from 'react-i18next'; import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; import { brandingApi } from '../../api/branding'; import { CheckIcon, CloseIcon } from './icons'; export function AnalyticsTab() { const { t } = useTranslation(); const queryClient = useQueryClient(); // Editing states const [editingYandex, setEditingYandex] = useState(false); const [editingGoogleId, setEditingGoogleId] = useState(false); const [editingGoogleLabel, setEditingGoogleLabel] = useState(false); const [yandexValue, setYandexValue] = useState(''); const [googleIdValue, setGoogleIdValue] = useState(''); const [googleLabelValue, setGoogleLabelValue] = useState(''); const [error, setError] = useState(null); // Query const { data: analytics } = useQuery({ queryKey: ['analytics-counters'], queryFn: brandingApi.getAnalyticsCounters, }); // Mutation const updateMutation = useMutation({ mutationFn: brandingApi.updateAnalyticsCounters, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['analytics-counters'] }); setError(null); }, onError: (err: unknown) => { const detail = (err as { response?: { data?: { detail?: string } } })?.response?.data?.detail; setError(detail || t('common.error')); }, }); const handleSaveYandex = () => { updateMutation.mutate( { yandex_metrika_id: yandexValue.trim() }, { onSuccess: () => setEditingYandex(false) }, ); }; const handleSaveGoogleId = () => { updateMutation.mutate( { google_ads_id: googleIdValue.trim() }, { onSuccess: () => setEditingGoogleId(false) }, ); }; const handleSaveGoogleLabel = () => { updateMutation.mutate( { google_ads_label: googleLabelValue.trim() }, { onSuccess: () => setEditingGoogleLabel(false) }, ); }; const yandexActive = Boolean(analytics?.yandex_metrika_id); const googleActive = Boolean(analytics?.google_ads_id); return (
{/* Error message */} {error && (
{error}
)} {/* Yandex Metrika */}

{t('admin.settings.yandexMetrika')}

{yandexActive ? t('admin.settings.counterActive') : t('admin.settings.counterInactive')}

{t('admin.settings.yandexMetrikaDesc')}

{editingYandex ? (
setYandexValue(e.target.value.replace(/\D/g, ''))} placeholder={t('admin.settings.yandexIdPlaceholder')} className="flex-1 rounded-xl border border-dark-600 bg-dark-700 px-4 py-2.5 text-dark-100 placeholder-dark-500 transition-colors focus:border-accent-500 focus:outline-none" autoFocus />
) : (
{analytics?.yandex_metrika_id || t('admin.settings.notConfigured')}
)}

{t('admin.settings.yandexIdHint')}

{/* Offline Conversions (inside Yandex block) */} {analytics?.offline_conv_enabled && ( <>
{t('admin.settings.offlineConv', 'Offline Conversions')}
{t('admin.settings.counterActive')}
{analytics.offline_conv_counter_id && (
{t('admin.settings.counterId')}: {analytics.offline_conv_counter_id}
)} {analytics.offline_conv_measurement_secret_masked && (
{t('admin.settings.apiKey', 'API Key')}: {analytics.offline_conv_measurement_secret_masked}
)} {analytics.offline_conv_goals && analytics.offline_conv_goals.length > 0 && (
{analytics.offline_conv_goals.map((goal) => (
{goal.name}
{goal.event_id} {goal.dedup}
))}
)} )}
{/* Google Ads */}

{t('admin.settings.googleAds')}

{googleActive ? t('admin.settings.counterActive') : t('admin.settings.counterInactive')}

{t('admin.settings.googleAdsDesc')}

{/* Conversion ID */}
{editingGoogleId ? (
setGoogleIdValue(e.target.value)} placeholder={t('admin.settings.googleIdPlaceholder')} className="flex-1 rounded-xl border border-dark-600 bg-dark-700 px-4 py-2.5 text-dark-100 placeholder-dark-500 transition-colors focus:border-accent-500 focus:outline-none" autoFocus />
) : (
{analytics?.google_ads_id || t('admin.settings.notConfigured')}
)}

{t('admin.settings.googleIdHint')}

{/* Conversion Label */}
{editingGoogleLabel ? (
setGoogleLabelValue(e.target.value)} placeholder={t('admin.settings.googleLabelPlaceholder')} className="flex-1 rounded-xl border border-dark-600 bg-dark-700 px-4 py-2.5 text-dark-100 placeholder-dark-500 transition-colors focus:border-accent-500 focus:outline-none" autoFocus />
) : (
{analytics?.google_ads_label || t('admin.settings.notConfigured')}
)}

{t('admin.settings.googleLabelHint')}

{/* Info block */}

{t('admin.settings.analyticsHint')}

); }