import React, { useCallback, useEffect, useState } from "react"; import { http, getActiveBase, BACKEND_URL, getSessionToken } from "../lib/api"; import { frontendUrl } from "../lib/paths"; import { Github, Link2, Unlink, RefreshCw } from "lucide-react"; import { toast } from "sonner"; const PROVIDER_ICONS = { github: Github, google: () => ( ), }; export default function ConnectedAccountsPanel() { const [accounts, setAccounts] = useState([]); const [loading, setLoading] = useState(true); const [busy, setBusy] = useState(null); const load = useCallback(async () => { setLoading(true); try { const r = await http.get("/connections"); setAccounts(r.data?.accounts || []); } catch (e) { toast.error(e?.response?.data?.detail || "Impossible de charger les comptes"); } finally { setLoading(false); } }, []); useEffect(() => { load(); }, [load]); const connect = (provider) => { const base = (getActiveBase() || BACKEND_URL || "").replace(/\/$/, ""); if (!base) { toast.error("Backend indisponible"); return; } const returnUrl = frontendUrl("/auth/connections/callback"); const qs = new URLSearchParams({ return_url: returnUrl }); const session = getSessionToken(); if (session) qs.set("session", session); window.location.href = `${base}/api/oauth/${provider}/start?${qs.toString()}`; }; const disconnect = async (provider) => { if (!window.confirm(`Déconnecter ${provider} ?`)) return; setBusy(provider); try { await http.delete(`/connections/${provider}`); toast.success("Compte déconnecté"); await load(); } catch (e) { toast.error(e?.response?.data?.detail || "Erreur"); } finally { setBusy(null); } }; if (loading) { return (
); } return (

Lie GitHub ou Google pour qu'Émo agisse avec tes comptes (tokens côté serveur uniquement).

{accounts.map((acc) => { const Icon = PROVIDER_ICONS[acc.provider] || Link2; const connected = acc.connected; const configured = acc.configured; const display = acc.profile?.display || acc.profile?.login; return (

{acc.label || acc.provider}

{connected && display ? (

Connecté en tant que {display}

) : configured ? (

Non connecté

) : (

{acc.message || "Configure keys on server"}

)}
{connected ? ( ) : ( )}
); })}
); }