CampFireID/app/components/UserProfile.tsx
degradin 54516a66e9 demo splitted
Исправлены экспорты компонентов:
UserProfile теперь использует export default
Shop теперь использует export default
TransferBalance теперь использует export default
Обновлены импорты в MainApp:
Все компоненты теперь импортируются как дефолтные импорты
Исправлены типы для безопасной работы с mongoose документами
Улучшен UI компонентов:
Добавлены отступы и границы
Улучшена читаемость текста
Добавлены информативные сообщения
Исправлена обработка ошибок:
Добавлены понятные сообщения об ошибках
Улучшена валидация форм
2025-03-16 12:19:42 +03:00

57 lines
1.8 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

'use client';
import React from 'react';
import { Box, VStack, Text, Progress, SimpleGrid, Badge } from '@chakra-ui/react';
import { IAchievement } from '../../backend/models/User';
interface UserProfileProps {
username: string;
level: number;
experience: number;
balance: number;
achievements: IAchievement[];
}
export default function UserProfile({ username, level, experience, balance, achievements }: UserProfileProps) {
// Простая формула для определения прогресса опыта
const expNeeded = level * 100;
const expProgress = (experience / expNeeded) * 100;
return (
<Box w="100%" p={4} borderWidth="1px" borderRadius="lg">
<VStack spacing={4} align="stretch">
<Text fontSize="2xl">Профиль</Text>
<Box>
<Text fontSize="lg">Имя пользователя: {username}</Text>
<Text>Уровень: {level}</Text>
<Text mb={2}>Опыт: {experience}/{expNeeded}</Text>
<Progress value={expProgress} colorScheme="green" />
</Box>
<Box>
<Text fontSize="lg">Баланс: {balance} монет</Text>
</Box>
{achievements.length > 0 && (
<Box>
<Text fontSize="lg" mb={2}>Достижения:</Text>
<SimpleGrid columns={[1, 2, 3]} spacing={4}>
{achievements.map((achievement) => (
<Badge
key={achievement.id}
p={2}
borderRadius="md"
colorScheme="purple"
variant="subtle"
>
{achievement.name}
</Badge>
))}
</SimpleGrid>
</Box>
)}
</VStack>
</Box>
);
}