Update files

This commit is contained in:
glpshchn 2025-12-05 00:56:22 +03:00
parent 97f20486a1
commit f7256b1dbb
1 changed files with 89 additions and 6 deletions

View File

@ -1,8 +1,11 @@
import { useState } from 'react'
import { Settings, Heart, Edit2, Shield } from 'lucide-react'
import { Settings, Heart, Edit2, Shield, UserPlus, Copy } from 'lucide-react'
import { createPortal } from 'react-dom'
import { updateProfile } from '../utils/api'
import { hapticFeedback } from '../utils/telegram'
import ThemeToggle from '../components/ThemeToggle'
import FollowListModal from '../components/FollowListModal'
import { decodeHtmlEntities } from '../utils/htmlEntities'
import './Profile.css'
const DONATION_URL = 'https://donatepay.ru/don/1435720'
@ -40,6 +43,8 @@ export default function Profile({ user, setUser }) {
const [bio, setBio] = useState(user.bio || '')
const [settings, setSettings] = useState(normalizeSettings(user.settings))
const [saving, setSaving] = useState(false)
const [showFollowers, setShowFollowers] = useState(false)
const [showFollowing, setShowFollowing] = useState(false)
const handleSaveBio = async () => {
try {
@ -110,6 +115,19 @@ export default function Profile({ user, setUser }) {
setSettings(updatedSettings)
}
const handleCopyReferral = () => {
const botUsername = import.meta.env.VITE_BOT_USERNAME || 'NakamaSpaceBot'
const referralLink = `https://t.me/${botUsername}?startapp=ref_${user.referralCode || user.id}`
navigator.clipboard.writeText(referralLink).then(() => {
hapticFeedback('success')
alert('Реферальная ссылка скопирована!')
}).catch(() => {
hapticFeedback('error')
alert('Не удалось скопировать ссылку')
})
}
return (
<div className="profile-page">
{/* Хедер */}
@ -140,7 +158,7 @@ export default function Profile({ user, setUser }) {
{user.bio ? (
<div className="profile-bio">
<p>{user.bio}</p>
<p>{decodeHtmlEntities(user.bio)}</p>
<button className="edit-bio-btn" onClick={() => setShowEditBio(true)}>
<Edit2 size={16} />
</button>
@ -154,18 +172,63 @@ export default function Profile({ user, setUser }) {
</div>
<div className="profile-stats">
<div className="stat-item">
<span className="stat-value">{user.followersCount || 0}</span>
<div
className="stat-item"
onClick={() => {
if (user.followers && user.followers.length > 0) {
setShowFollowers(true)
hapticFeedback('light')
}
}}
style={{ cursor: (user.followers && user.followers.length > 0) ? 'pointer' : 'default' }}
>
<span className="stat-value">{user.followersCount || user.followers?.length || 0}</span>
<span className="stat-label">Подписчики</span>
</div>
<div className="stat-divider" />
<div className="stat-item">
<span className="stat-value">{user.followingCount || 0}</span>
<div
className="stat-item"
onClick={() => {
if (user.following && user.following.length > 0) {
setShowFollowing(true)
hapticFeedback('light')
}
}}
style={{ cursor: (user.following && user.following.length > 0) ? 'pointer' : 'default' }}
>
<span className="stat-value">{user.followingCount || user.following?.length || 0}</span>
<span className="stat-label">Подписки</span>
</div>
</div>
</div>
{/* Реферальная карточка */}
{user.referralCode && (
<div className="referral-card card">
<div className="referral-content">
<div className="referral-icon">
<UserPlus size={20} />
</div>
<div className="referral-text">
<h3>Реферальная программа</h3>
<p>Приглашайте друзей и получайте бонусы за каждого приглашенного пользователя!</p>
<div className="referral-stats">
Приглашено: <strong>{user.referralsCount || 0}</strong>
</div>
</div>
</div>
<div className="referral-link-section">
<div className="referral-link">
<code>{`https://t.me/${import.meta.env.VITE_BOT_USERNAME || 'NakamaSpaceBot'}?startapp=ref_${user.referralCode}`}</code>
</div>
<button className="referral-copy-btn" onClick={handleCopyReferral}>
<Copy size={16} />
Скопировать ссылку
</button>
</div>
</div>
)}
<div className="donation-card card">
<div className="donation-content">
<div className="donation-icon">
@ -334,6 +397,26 @@ export default function Profile({ user, setUser }) {
</div>
</div>
)}
{/* Модалка подписчиков */}
{showFollowers && user && user.followers && (
<FollowListModal
users={user.followers}
title="Подписчики"
currentUser={user}
onClose={() => setShowFollowers(false)}
/>
)}
{/* Модалка подписок */}
{showFollowing && user && user.following && (
<FollowListModal
users={user.following}
title="Подписки"
currentUser={user}
onClose={() => setShowFollowing(false)}
/>
)}
</div>
)
}