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) {
throw new Error('Пользователь не найден');
}
@ -65,7 +65,7 @@ export default function MainApp() {
setShopItems(shopData);
// Сообщаем Telegram, что приложение готово
webApp.ready();
webApp.ready?.();
} catch (error: any) {
console.error('Initialization error:', error);
toast({

View File

@ -4,6 +4,14 @@ 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<Pick<WebApp,
| 'initData'
| 'initDataUnsafe'
@ -43,14 +51,27 @@ export function useTelegramWebApp() {
}
if (typeof window !== 'undefined') {
const WebAppModule = await import('@twa-dev/sdk');
if (isMounted) {
if (WebAppModule.default) {
// Проверяем наличие 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) {

View File

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