'use client'; import { useEffect, useState } from 'react'; import { isDemoMode, getDemoWebApp } from '../utils/demo'; import type { WebApp } from '@twa-dev/types'; declare global { interface Window { Telegram?: { WebApp?: WebApp; }; } } type SafeWebApp = Partial>; export function useTelegramWebApp() { const [webApp, setWebApp] = useState(null); const [error, setError] = useState(null); const [isInitialized, setIsInitialized] = useState(false); useEffect(() => { let isMounted = true; const initWebApp = async () => { try { if (isDemoMode()) { if (isMounted) { const demoWebApp = getDemoWebApp(); setWebApp(demoWebApp); setIsInitialized(true); } return; } if (typeof window !== 'undefined') { // Проверяем наличие Telegram WebApp в глобальном объекте if (window.Telegram?.WebApp) { if (isMounted) { setWebApp(window.Telegram.WebApp as SafeWebApp); setIsInitialized(true); } return; } try { // Если WebApp не найден в глобальном объекте, пробуем импортировать SDK const WebAppModule = await import('@twa-dev/sdk'); if (isMounted && WebAppModule.default) { setWebApp(WebAppModule.default as SafeWebApp); setIsInitialized(true); } else { throw new Error('WebApp не найден'); } } catch (importError) { console.error('SDK import error:', importError); throw new Error('Ошибка импорта Telegram Web App SDK'); } } } catch (err) { console.error('WebApp initialization error:', err); if (isMounted) { setError('Ошибка инициализации Telegram Web App'); } } }; if (!isInitialized) { initWebApp(); } return () => { isMounted = false; }; }, [isInitialized]); return { webApp, error, isInitialized }; }