'use client'; import { useEffect, useState, useCallback } from 'react'; import type { WebApp } from '@twa-dev/types'; import { isDemoMode, getDemoWebApp } from '../utils/demo'; declare global { interface Window { Telegram?: { WebApp?: WebApp; }; } } export interface UseTelegramWebAppResult { webApp: WebApp | null; error: Error | null; isLoading: boolean; isInitialized: boolean; } export function useTelegramWebApp(): UseTelegramWebAppResult { const [webApp, setWebApp] = useState(null); const [error, setError] = useState(null); const [isLoading, setIsLoading] = useState(true); const [isInitialized, setIsInitialized] = useState(false); const initWebApp = useCallback(async () => { try { setIsLoading(true); setError(null); if (isDemoMode()) { const demoWebApp = getDemoWebApp(); setWebApp(demoWebApp); setIsInitialized(true); return; } if (typeof window !== 'undefined') { if (window.Telegram?.WebApp) { setWebApp(window.Telegram.WebApp); setIsInitialized(true); } else { throw new Error('Telegram WebApp не найден'); } } } catch (err) { console.error('Ошибка инициализации WebApp:', err); setError(err instanceof Error ? err : new Error('Неизвестная ошибка')); } finally { setIsLoading(false); } }, []); useEffect(() => { initWebApp(); }, [initWebApp]); useEffect(() => { if (!webApp) return; const handleThemeChange = () => { // Обновляем состояние при изменении темы setWebApp(prevWebApp => { if (!prevWebApp) return null; return { ...prevWebApp }; }); }; webApp.onEvent('themeChanged', handleThemeChange); return () => { webApp.offEvent('themeChanged', handleThemeChange); }; }, [webApp]); return { webApp, error, isLoading, isInitialized }; }