'use client'; import { useState, useEffect } from 'react'; import Link from 'next/link'; import { StudentNav } from '@/components/StudentNav'; import { BalanceCard } from '@/components/BalanceCard'; import { TransactionList } from '@/components/TransactionList'; import { Spinner } from '@/components/ui'; import { api } from '@/lib/api'; import { useAuthStore } from '@/lib/store'; import type { Profile, Transaction, PaginatedResponse } from '@/lib/types'; export default function StudentDashboardPage() { const { user, updateBalance } = useAuthStore(); const [profile, setProfile] = useState(null); const [transactions, setTransactions] = useState([]); const [loadingProfile, setLoadingProfile] = useState(true); const [loadingTxs, setLoadingTxs] = useState(true); const [error, setError] = useState(null); useEffect(() => { async function load() { try { const [p, page] = await Promise.all([ api.get('/api/v1/me'), api.get>('/api/v1/me/transactions?limit=5'), ]); setProfile(p); updateBalance(p.balance); setTransactions(page.transactions); } catch (e) { setError(e instanceof Error ? e.message : 'Ошибка загрузки'); } finally { setLoadingProfile(false); setLoadingTxs(false); } } load(); }, [updateBalance]); if (loadingProfile) { return (
); } if (error) { return (

{error}

); } const displayName = profile?.name ?? user?.name ?? ''; const balance = profile?.balance ?? user?.balance ?? 0; return (

Привет, {displayName.split(' ')[0]} 👋

Последние операции

Вся история →
); }