import { useState, useEffect } from 'react' import { Link } from 'react-router-dom' import { api } from '../api' const networkColors = { Amazon: 'bg-amber-50 text-amber-700', ClickBank: 'bg-emerald-50 text-emerald-700', ShareASale: 'bg-blue-50 text-blue-700', CJ: 'bg-violet-50 text-violet-700', Impact: 'bg-rose-50 text-rose-700', } export default function AffiliateList() { const [links, setLinks] = useState([]) const [characters, setCharacters] = useState([]) const [loading, setLoading] = useState(true) const [filterCharacter, setFilterCharacter] = useState('') useEffect(() => { loadData() }, []) const loadData = async () => { setLoading(true) try { const [linksData, charsData] = await Promise.all([ api.get('/affiliates/'), api.get('/characters/'), ]) setLinks(linksData) setCharacters(charsData) } catch { // silent } finally { setLoading(false) } } const getCharacterName = (id) => { if (!id) return 'Globale' const c = characters.find((ch) => ch.id === id) return c ? c.name : '—' } const getNetworkColor = (network) => { return networkColors[network] || 'bg-slate-100 text-slate-600' } const handleToggle = async (link) => { try { await api.put(`/affiliates/${link.id}`, { is_active: !link.is_active }) loadData() } catch { // silent } } const handleDelete = async (id, name) => { if (!confirm(`Eliminare "${name}"?`)) return try { await api.delete(`/affiliates/${id}`) loadData() } catch { // silent } } const truncateUrl = (url) => { if (!url) return '—' if (url.length <= 50) return url return url.substring(0, 50) + '...' } const filtered = links.filter((l) => { if (filterCharacter === '') return true if (filterCharacter === 'global') return !l.character_id return String(l.character_id) === filterCharacter }) return (

Link Affiliati

Gestisci i link affiliati per la monetizzazione

+ Nuovo Link
{/* Filters */}
{filtered.length} link
{loading ? (
) : filtered.length === 0 ? (

Nessun link affiliato

Aggiungi i tuoi primi link affiliati per monetizzare i contenuti

+ Crea link affiliato
) : (
{filtered.map((link) => ( ))}
Network Nome URL Tag Topic Personaggio Stato Click Azioni
{link.network || '—'} {link.name} {truncateUrl(link.url)} {link.tag || '—'}
{link.topics && link.topics.slice(0, 2).map((t, i) => ( {t} ))} {link.topics && link.topics.length > 2 && ( +{link.topics.length - 2} )}
{getCharacterName(link.character_id)} {link.click_count ?? 0}
Modifica
)}
) }