import { useState, useEffect } from 'react' import { api } from '../api' const platformLabels = { instagram: 'Instagram', facebook: 'Facebook', youtube: 'YouTube', tiktok: 'TikTok', } const platformColors = { instagram: 'bg-pink-50 text-pink-600 border-pink-200', facebook: 'bg-blue-50 text-blue-600 border-blue-200', youtube: 'bg-red-50 text-red-600 border-red-200', tiktok: 'bg-slate-900 text-white border-slate-700', } const EMPTY_ACCOUNT = { platform: 'instagram', account_name: '', access_token: '', page_id: '', } export default function SocialAccounts() { const [characters, setCharacters] = useState([]) const [accounts, setAccounts] = useState([]) const [loading, setLoading] = useState(true) const [showForm, setShowForm] = useState(null) // character_id or null const [form, setForm] = useState(EMPTY_ACCOUNT) const [saving, setSaving] = useState(false) const [error, setError] = useState('') const [testing, setTesting] = useState(null) const [testResult, setTestResult] = useState({}) useEffect(() => { loadData() }, []) const loadData = async () => { setLoading(true) try { const [charsData, accsData] = await Promise.all([ api.get('/characters/'), api.get('/social/accounts'), ]) setCharacters(charsData) setAccounts(accsData) } catch { // silent } finally { setLoading(false) } } const getAccountsForCharacter = (characterId) => { return accounts.filter((a) => a.character_id === characterId) } const handleFormChange = (field, value) => { setForm((prev) => ({ ...prev, [field]: value })) } const handleAddAccount = async (characterId) => { setError('') setSaving(true) try { await api.post('/social/accounts', { character_id: characterId, platform: form.platform, account_name: form.account_name, access_token: form.access_token, page_id: form.page_id || null, }) setShowForm(null) setForm(EMPTY_ACCOUNT) loadData() } catch (err) { setError(err.message || 'Errore nel salvataggio') } finally { setSaving(false) } } const handleTest = async (accountId) => { setTesting(accountId) setTestResult((prev) => ({ ...prev, [accountId]: null })) try { const result = await api.post(`/social/accounts/${accountId}/test`) setTestResult((prev) => ({ ...prev, [accountId]: { success: true, message: result.message || 'Connessione OK' } })) } catch (err) { setTestResult((prev) => ({ ...prev, [accountId]: { success: false, message: err.message || 'Test fallito' } })) } finally { setTesting(null) } } const handleToggle = async (account) => { try { await api.put(`/social/accounts/${account.id}`, { is_active: !account.is_active }) loadData() } catch { // silent } } const handleRemove = async (accountId) => { if (!confirm('Rimuovere questo account social?')) return try { await api.delete(`/social/accounts/${accountId}`) loadData() } catch { // silent } } if (loading) { return (
Gestisci le connessioni ai social network
Gestisci le connessioni ai social network per ogni personaggio
Configurazione OAuth
Per la pubblicazione automatica, ogni piattaforma richiede la configurazione di un'app developer con le relative credenziali OAuth. Inserisci access token e page ID ottenuti dalla console developer di ciascuna piattaforma.
◇
Nessun personaggio
Crea un personaggio per poi collegare gli account social
{character.niche}
Nessun account collegato