import { useEffect, useCallback, useRef } from 'react'; import { useNavigate } from 'react-router'; import { useTranslation } from 'react-i18next'; import { useQuery } from '@tanstack/react-query'; import { openLink as sdkOpenLink } from '@telegram-apps/sdk-react'; import { subscriptionApi } from '../api/subscription'; import { useTelegramSDK } from '../hooks/useTelegramSDK'; import { useHaptic } from '@/platform'; import { resolveTemplate, hasTemplates } from '../utils/templateEngine'; import { useAuthStore } from '../store/auth'; import type { AppConfig } from '../types'; import InstallationGuide from '../components/connection/InstallationGuide'; export default function Connection() { const { t, i18n } = useTranslation(); const navigate = useNavigate(); const { user } = useAuthStore(); const { isTelegramWebApp } = useTelegramSDK(); const { impact: hapticImpact } = useHaptic(); const hapticRef = useRef(hapticImpact); hapticRef.current = hapticImpact; const { data: appConfig, isLoading, error, } = useQuery({ queryKey: ['appConfig'], queryFn: () => subscriptionApi.getAppConfig(), }); const handleGoBack = useCallback(() => { navigate(-1); }, [navigate]); useEffect(() => { const handleKeyDown = (e: KeyboardEvent) => { if (e.key === 'Escape') { e.preventDefault(); handleGoBack(); } }; document.addEventListener('keydown', handleKeyDown); return () => document.removeEventListener('keydown', handleKeyDown); }, [handleGoBack]); const resolveUrl = useCallback( (url: string): string => { if (!hasTemplates(url) || !appConfig?.subscriptionUrl) return url; return resolveTemplate(url, { subscriptionUrl: appConfig.subscriptionUrl, username: user?.username ?? undefined, }); }, [appConfig?.subscriptionUrl, user?.username], ); const openDeepLink = useCallback( (deepLink: string) => { let resolved = deepLink; if (hasTemplates(resolved)) { resolved = resolveUrl(resolved); } const finalUrl = `${window.location.origin}/miniapp/redirect.html?url=${encodeURIComponent(resolved)}&lang=${i18n.language || 'en'}`; if (isTelegramWebApp) { try { sdkOpenLink(finalUrl, { tryInstantView: false }); return; } catch { // SDK not available, fallback } } window.location.href = finalUrl; }, [isTelegramWebApp, i18n.language, resolveUrl], ); // Loading if (isLoading) { return (
); } // Error if (error || !appConfig) { return (

{t('common.error')}

); } // No subscription if (!appConfig.hasSubscription) { return (

{t('subscription.connection.title')}

{t('subscription.connection.noSubscription')}

); } return ( ); }