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 (
Gestisci i link affiliati per la monetizzazione
⟁
Nessun link affiliato
Aggiungi i tuoi primi link affiliati per monetizzare i contenuti
+ Crea link affiliato| 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
|