import React, { useState, useEffect } from 'react'; import { Box, Typography, Card, CardContent, Tab, Tabs, List, ListItem, ListItemText, ListItemIcon, Chip, CircularProgress, Alert, Button, } from '@mui/material'; import { Person, Star, History, ShoppingCart, AddCircle, RemoveCircle, } from '@mui/icons-material'; import { useAuth } from '../context/AuthContext'; import { apiService } from '../services/api'; import type { Transaction, Purchase } from '../types'; interface TabPanelProps { children?: React.ReactNode; index: number; value: number; } const TabPanel: React.FC = ({ children, value, index }) => { return ( ); }; export const ProfilePage: React.FC = () => { const { user, logout } = useAuth(); const [value, setValue] = useState(0); const [transactions, setTransactions] = useState([]); const [purchases, setPurchases] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { const fetchData = async () => { try { const [transactionsResponse, purchasesResponse] = await Promise.all([ apiService.getUserTransactions(), apiService.getUserPurchases(), ]); if (transactionsResponse.success && transactionsResponse.data) { setTransactions(transactionsResponse.data); } if (purchasesResponse.success && purchasesResponse.data) { setPurchases(purchasesResponse.data); } } catch (err) { console.error('Error fetching profile data:', err); setError('Произошла ошибка при загрузке данных'); } finally { setLoading(false); } }; fetchData(); }, []); const handleChange = (_event: React.SyntheticEvent, newValue: number) => { setValue(newValue); }; const formatDate = (dateString: string) => { return new Date(dateString).toLocaleString('ru-RU', { day: '2-digit', month: '2-digit', year: 'numeric', hour: '2-digit', minute: '2-digit', }); }; const handleLogout = () => { logout(); }; if (loading) { return ( ); } if (error) { return ( {error} ); } return ( {/* Profile Header */} {user?.photo_url ? ( User Avatar ) : ( )} {user?.first_name} {user?.last_name} @{user?.username} ID: {user?.telegram_id} {user?.stars_balance} ⭐ {/* Tabs */} } label="История" id="profile-tab-0" aria-controls="profile-tabpanel-0" /> } label="Покупки" id="profile-tab-1" aria-controls="profile-tabpanel-1" /> {/* Tab Panels */} {transactions.map((transaction, index) => ( {transaction.type === 'earned' ? ( ) : ( )} {transaction.description} } secondary={ {formatDate(transaction.created_at)} } /> ))} {transactions.length === 0 && ( Пока нет транзакций )} {purchases.map((purchase, index) => ( Покупка #{purchase.id} } secondary={ {formatDate(purchase.purchased_at)} } /> ))} {purchases.length === 0 && ( Пока нет покупок )} ); };