import React, { useState, useEffect } from 'react' import { useAuth } from './auth/AuthContext' import Toast from './Toast' import './Tracking.css' function TrackingAccess({ onNavigate }) { const { authFetch } = useAuth() const [generating, setGenerating] = useState(false) const [copied, setCopied] = useState(false) const [trackers, setTrackers] = useState([]) const [tracked, setTracked] = useState([]) const [loading, setLoading] = useState(true) const [toastMessage, setToastMessage] = useState(null) // Загрузка списков при монтировании useEffect(() => { fetchAccessData() }, []) const fetchAccessData = async () => { setLoading(true) try { const res = await authFetch('/api/tracking/access') if (res.ok) { const data = await res.json() setTrackers(data.trackers || []) setTracked(data.tracked || []) } } catch (err) { console.error('Error fetching access data:', err) } finally { setLoading(false) } } const handleCreateInvite = async () => { setGenerating(true) try { const res = await authFetch('/api/tracking/invite', { method: 'POST' }) if (res.ok) { const data = await res.json() await navigator.clipboard.writeText(data.invite_url) setCopied(true) setToastMessage({ text: 'Ссылка скопирована! Действует 1 час', type: 'success' }) setTimeout(() => setCopied(false), 3000) } else { setToastMessage({ text: 'Ошибка создания ссылки', type: 'error' }) } } catch (err) { setToastMessage({ text: 'Ошибка создания ссылки', type: 'error' }) } finally { setGenerating(false) } } const handleRemoveTracker = async (relationId) => { if (!window.confirm('Запретить этому пользователю видеть вашу статистику?')) return try { const res = await authFetch(`/api/tracking/trackers/${relationId}`, { method: 'DELETE' }) if (res.ok) { setTrackers(prev => prev.filter(t => t.relation_id !== relationId)) setToastMessage({ text: 'Доступ отозван', type: 'success' }) } } catch (err) { setToastMessage({ text: 'Ошибка', type: 'error' }) } } const handleRemoveTracked = async (relationId) => { if (!window.confirm('Прекратить отслеживать этого пользователя?')) return try { const res = await authFetch(`/api/tracking/tracked/${relationId}`, { method: 'DELETE' }) if (res.ok) { setTracked(prev => prev.filter(t => t.relation_id !== relationId)) setToastMessage({ text: 'Отслеживание прекращено', type: 'success' }) } } catch (err) { setToastMessage({ text: 'Ошибка', type: 'error' }) } } return (
Создайте одноразовую ссылку (действует 1 час)
Пока никто не отслеживает вашу статистику
) : ( trackers.map(t => (Вы пока никого не отслеживаете
) : ( tracked.map(t => (