This commit is contained in:
degradin 2025-03-16 12:55:51 +03:00
parent 33248392ff
commit 65a143ef4d
3 changed files with 30 additions and 7 deletions

View File

@ -48,7 +48,7 @@ export default function MainApp() {
} }
// Авторизация пользователя // Авторизация пользователя
const { user: telegramUser } = webApp.initDataUnsafe; const telegramUser = webApp.initDataUnsafe?.user;
if (!telegramUser) { if (!telegramUser) {
throw new Error('Пользователь не найден'); throw new Error('Пользователь не найден');
} }
@ -65,7 +65,7 @@ export default function MainApp() {
setShopItems(shopData); setShopItems(shopData);
// Сообщаем Telegram, что приложение готово // Сообщаем Telegram, что приложение готово
webApp.ready(); webApp.ready?.();
} catch (error: any) { } catch (error: any) {
console.error('Initialization error:', error); console.error('Initialization error:', error);
toast({ toast({

View File

@ -4,6 +4,14 @@ import { useEffect, useState } from 'react';
import { isDemoMode, getDemoWebApp } from '../utils/demo'; import { isDemoMode, getDemoWebApp } from '../utils/demo';
import type { WebApp } from '@twa-dev/types'; import type { WebApp } from '@twa-dev/types';
declare global {
interface Window {
Telegram?: {
WebApp?: WebApp;
};
}
}
type SafeWebApp = Partial<Pick<WebApp, type SafeWebApp = Partial<Pick<WebApp,
| 'initData' | 'initData'
| 'initDataUnsafe' | 'initDataUnsafe'
@ -43,14 +51,27 @@ export function useTelegramWebApp() {
} }
if (typeof window !== 'undefined') { if (typeof window !== 'undefined') {
const WebAppModule = await import('@twa-dev/sdk'); // Проверяем наличие Telegram WebApp в глобальном объекте
if (isMounted) { if (window.Telegram?.WebApp) {
if (WebAppModule.default) { 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); setWebApp(WebAppModule.default as SafeWebApp);
setIsInitialized(true); setIsInitialized(true);
} else { } else {
throw new Error('WebApp не найден'); throw new Error('WebApp не найден');
} }
} catch (importError) {
console.error('SDK import error:', importError);
throw new Error('Ошибка импорта Telegram Web App SDK');
} }
} }
} catch (err) { } catch (err) {

View File

@ -8,7 +8,9 @@ const demoUser: WebAppUser = {
first_name: 'Demo', first_name: 'Demo',
username: 'demo_user', username: 'demo_user',
language_code: 'ru', language_code: 'ru',
is_premium: false is_premium: false,
last_name: '',
photo_url: ''
}; };
const demoInitData: WebAppInitData = { const demoInitData: WebAppInitData = {
@ -46,7 +48,7 @@ type SafeWebApp = Pick<WebApp,
>; >;
export const getDemoWebApp = (): SafeWebApp => ({ export const getDemoWebApp = (): SafeWebApp => ({
initData: 'demo_mode', initData: JSON.stringify(demoInitData),
initDataUnsafe: demoInitData, initDataUnsafe: demoInitData,
platform: 'WEBVIEW' as Platforms, platform: 'WEBVIEW' as Platforms,
colorScheme: 'light', colorScheme: 'light',