import { useState, useRef } from 'react'; import { useTranslation } from 'react-i18next'; import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; import { brandingApi, setCachedBranding } from '../../api/branding'; import { setCachedFullscreenEnabled } from '../../hooks/useTelegramSDK'; import { UploadIcon, TrashIcon, PencilIcon, CheckIcon, CloseIcon } from './icons'; import { Toggle } from './Toggle'; import { BackgroundEditor } from './BackgroundEditor'; interface BrandingTabProps { accentColor?: string; } export function BrandingTab({ accentColor = '#3b82f6' }: BrandingTabProps) { const { t } = useTranslation(); const queryClient = useQueryClient(); const fileInputRef = useRef(null); const [editingName, setEditingName] = useState(false); const [newName, setNewName] = useState(''); // Queries const { data: branding } = useQuery({ queryKey: ['branding'], queryFn: brandingApi.getBranding, }); const { data: fullscreenSettings } = useQuery({ queryKey: ['fullscreen-enabled'], queryFn: brandingApi.getFullscreenEnabled, }); const { data: emailAuthSettings } = useQuery({ queryKey: ['email-auth-enabled'], queryFn: brandingApi.getEmailAuthEnabled, }); const { data: giftSettings } = useQuery({ queryKey: ['gift-enabled'], queryFn: brandingApi.getGiftEnabled, }); // Mutations const updateBrandingMutation = useMutation({ mutationFn: brandingApi.updateName, onSuccess: (data) => { setCachedBranding(data); queryClient.invalidateQueries({ queryKey: ['branding'] }); setEditingName(false); }, }); const uploadLogoMutation = useMutation({ mutationFn: brandingApi.uploadLogo, onSuccess: (data) => { setCachedBranding(data); queryClient.invalidateQueries({ queryKey: ['branding'] }); }, }); const deleteLogoMutation = useMutation({ mutationFn: brandingApi.deleteLogo, onSuccess: (data) => { setCachedBranding(data); queryClient.invalidateQueries({ queryKey: ['branding'] }); }, }); const updateFullscreenMutation = useMutation({ mutationFn: (enabled: boolean) => brandingApi.updateFullscreenEnabled(enabled), onSuccess: (data) => { setCachedFullscreenEnabled(data.enabled); queryClient.invalidateQueries({ queryKey: ['fullscreen-enabled'] }); }, }); const updateEmailAuthMutation = useMutation({ mutationFn: (enabled: boolean) => brandingApi.updateEmailAuthEnabled(enabled), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['email-auth-enabled'] }); }, }); const updateGiftMutation = useMutation({ mutationFn: (enabled: boolean) => brandingApi.updateGiftEnabled(enabled), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['gift-enabled'] }); }, }); const handleLogoUpload = (e: React.ChangeEvent) => { const file = e.target.files?.[0]; if (file) { uploadLogoMutation.mutate(file); } }; return (
{/* Logo & Name */}

{t('admin.settings.logoAndName')}

{/* Logo */}
{branding?.has_custom_logo ? ( Logo ) : ( branding?.logo_letter || 'V' )}
{branding?.has_custom_logo && ( )}
{/* Name */}
{editingName ? (
setNewName(e.target.value)} className="flex-1 rounded-xl border border-dark-600 bg-dark-700 px-4 py-2 text-dark-100 focus:border-accent-500 focus:outline-none" maxLength={50} />
) : (
{branding?.name || t('admin.settings.notSpecified')}
)}
{/* Animated Background Editor */}
{/* Fullscreen & Email toggles */}

{t('admin.settings.interfaceOptions')}

{t('admin.settings.autoFullscreen')}

{t('admin.settings.autoFullscreenDesc')}

updateFullscreenMutation.mutate(!(fullscreenSettings?.enabled ?? false)) } disabled={updateFullscreenMutation.isPending} />
{t('admin.settings.emailAuth')}

{t('admin.settings.emailAuthDesc')}

updateEmailAuthMutation.mutate(!(emailAuthSettings?.enabled ?? true))} disabled={updateEmailAuthMutation.isPending} />
{t('admin.settings.giftEnabled')}

{t('admin.settings.giftEnabledDesc')}

updateGiftMutation.mutate(!(giftSettings?.enabled ?? false))} disabled={updateGiftMutation.isPending} />
); }