import { useState } from 'react' import { Settings, Heart, Edit2, Shield } from 'lucide-react' import { updateProfile } from '../utils/api' import { hapticFeedback } from '../utils/telegram' import ThemeToggle from '../components/ThemeToggle' import './Profile.css' const DONATION_URL = 'https://donatepay.ru/don/1435720' const ALLOWED_SEARCH_PREFERENCES = ['furry', 'anime'] const normalizeSearchPreference = (value) => ALLOWED_SEARCH_PREFERENCES.includes(value) ? value : 'furry' const DEFAULT_SETTINGS = { whitelist: { noNSFW: true }, searchPreference: 'furry' } const normalizeSettings = (rawSettings = {}) => { const mergedWhitelist = { ...DEFAULT_SETTINGS.whitelist, ...(rawSettings.whitelist || {}) } return { ...DEFAULT_SETTINGS, ...rawSettings, whitelist: mergedWhitelist, searchPreference: normalizeSearchPreference(rawSettings.searchPreference) } } export default function Profile({ user, setUser }) { const [showSettings, setShowSettings] = useState(false) const [showEditBio, setShowEditBio] = useState(false) const [bio, setBio] = useState(user.bio || '') const [settings, setSettings] = useState(normalizeSettings(user.settings)) const [saving, setSaving] = useState(false) const handleSaveBio = async () => { try { setSaving(true) hapticFeedback('light') const updatedUser = await updateProfile({ bio }) setUser({ ...user, bio }) setShowEditBio(false) hapticFeedback('success') } catch (error) { console.error('Ошибка сохранения:', error) hapticFeedback('error') } finally { setSaving(false) } } const handleSaveSettings = async () => { try { setSaving(true) hapticFeedback('light') const normalizedSettings = normalizeSettings(settings) await updateProfile({ settings: normalizedSettings }) setUser({ ...user, settings: normalizedSettings }) setSettings(normalizedSettings) setShowSettings(false) hapticFeedback('success') } catch (error) { console.error('Ошибка сохранения:', error) hapticFeedback('error') } finally { setSaving(false) } } const handleDonate = () => { hapticFeedback('light') window.open(DONATION_URL, '_blank', 'noopener,noreferrer') } const updateWhitelistSetting = async (key, value) => { const updatedSettings = normalizeSettings({ ...settings, whitelist: { ...settings.whitelist, [key]: value } }) setSettings(updatedSettings) // Сохранить сразу на сервер try { await updateProfile({ settings: updatedSettings }) hapticFeedback('success') } catch (error) { console.error('Ошибка сохранения настроек:', error) hapticFeedback('error') } } const updateSearchPreference = (value) => { const updatedSettings = normalizeSettings({ ...settings, searchPreference: value }) setSettings(updatedSettings) } return (
@{user.username || user.firstName || 'user'}
{user.bio ? ({user.bio}
Каждый взнос помогает развивать Nakama и запускать новые функции.