import React, { useState, useEffect } from 'react'; import { Link, useNavigate } from 'react-router-dom'; import { getUserInfo, isTelegramWebAppAvailable, getCurrentUserId } from '../../constants/user'; import { images } from '../../assets'; import apiService from '../../services/api'; import TokenPacksModal from '../tokens/TokenPacksModal'; import { paymentService } from '../../services/paymentService'; import { tokenPacks } from '../../constants/tokenPacks'; import NotificationModal from '../shared/NotificationModal'; import { useBalance } from '../../contexts/BalanceContext'; import customAnalyticsService from '../../services/customAnalyticsService'; import styles from './Header.module.css'; const Header: React.FC = () => { const navigate = useNavigate(); const { balance, updateBalance } = useBalance(); // Используем контекст баланса const [user, setUser] = useState({ telegramId: 0, username: '', avatarUrl: '' }); const [showTokensModal, setShowTokensModal] = useState(false); const [lastPurchasedPack, setLastPurchasedPack] = useState(null); const [showNotificationModal, setShowNotificationModal] = useState(false); const [notificationTitle, setNotificationTitle] = useState(''); const [notificationMessage, setNotificationMessage] = useState(''); useEffect(() => { // Получаем информацию о пользователе const userInfo = getUserInfo(); // Если есть данные из Telegram, обновляем состояние if (isTelegramWebAppAvailable()) { setUser({ telegramId: userInfo.id, username: userInfo.first_name + (userInfo.last_name ? ` ${userInfo.last_name}` : ''), avatarUrl: userInfo.photo_url || '/ava.jpg' // Используем фото из Telegram или дефолтное }); } else { // Для локальной разработки setUser({ telegramId: 12345678, username: "TestUser", avatarUrl: "/ava.jpg" }); } }, []); return (
{/* Профиль пользователя */}
Avatar { e.currentTarget.onerror = null; e.currentTarget.src = 'data:image/svg+xml;utf8,'; }} />
{user.username} {/* Баланс токенов */}
{/* Модальное окно с пакетами токенов */} setShowTokensModal(false)} onShowAllPacks={() => navigate('/profile')} missingTokens={0} onBuyPack={(packId) => { const pack = tokenPacks.find(p => p.id === packId); if (!pack) return; setShowTokensModal(false); setLastPurchasedPack(pack); paymentService.showBuyTokensPopup(pack, async (userData) => { if (userData) { // Обновляем баланс через контекст updateBalance(); // Показываем модальное окно с информацией об успешной оплате setNotificationTitle('Оплата успешна!'); setNotificationMessage(`Вы успешно приобрели ${pack.tokens + pack.bonusTokens} токенов.`); setShowNotificationModal(true); } else { // Если данные не получены, делаем запрос на получение данных пользователя try { // Получаем баланс пользователя const balance = await apiService.getBalance(getCurrentUserId()); // Обновляем баланс через контекст updateBalance(); // Показываем модальное окно с информацией об успешной оплате setNotificationTitle('Оплата успешна!'); setNotificationMessage(`Вы успешно приобрели ${pack.tokens + pack.bonusTokens} токенов. Ваш текущий баланс: ${balance} токенов.`); setShowNotificationModal(true); } catch (error) { console.error('Ошибка при обновлении данных пользователя:', error); } } }); }} /> {/* Модальное окно уведомления */} setShowNotificationModal(false)} onContinueClick={() => setShowNotificationModal(false)} showGalleryButton={false} continueButtonText="Закрыть" />
); }; export default Header;