import { useEffect, useState } from 'react' import { api } from '../utils/api' export default function TandoorSettings() { const [baseUrl, setBaseUrl] = useState('') const [token, setToken] = useState('') const [tokenSet, setTokenSet] = useState(false) const [tokenHint, setTokenHint] = useState(null) const [lastOk, setLastOk] = useState(null) const [lastError, setLastError] = useState(null) const [busy, setBusy] = useState(false) const [msg, setMsg] = useState(null) const load = async () => { const s = await api.getTandoorSettings() setBaseUrl(s.base_url || '') setTokenSet(Boolean(s.token_set)) setTokenHint(s.token_hint || null) setLastOk(s.last_ok_at || null) setLastError(s.last_error || null) setToken('') } useEffect(() => { load().catch((e) => setMsg({ type: 'err', text: e.message })) }, []) const save = async () => { setBusy(true) setMsg(null) try { const s = await api.putTandoorSettings({ base_url: baseUrl, token: token.trim() || undefined, }) setToken('') setTokenSet(Boolean(s.token_set)) setTokenHint(s.token_hint || null) setLastError(s.last_error || null) setMsg({ type: 'ok', text: 'Gespeichert. Das Token bleibt nur auf dem Server.' }) } catch (e) { setMsg({ type: 'err', text: e.message }) } finally { setBusy(false) } } const test = async () => { setBusy(true) setMsg(null) try { const res = await api.testTandoorConnection({ base_url: baseUrl || undefined, token: token.trim() || undefined, }) const who = res.user ? ` als ${res.user}` : '' setMsg({ type: 'ok', text: `Verbindung ok${who}.` }) setLastError(null) setLastOk(new Date().toISOString()) } catch (e) { setMsg({ type: 'err', text: e.message }) } finally { setBusy(false) } } const clear = async () => { if (!confirm('Tandoor-Zugang wirklich entfernen?')) return setBusy(true) setMsg(null) try { await api.putTandoorSettings({ base_url: '', clear_token: true }) setBaseUrl('') setToken('') setTokenSet(false) setTokenHint(null) setLastOk(null) setLastError(null) setMsg({ type: 'ok', text: 'Zugang entfernt.' }) } catch (e) { setMsg({ type: 'err', text: e.message }) } finally { setBusy(false) } } return (
Tandoor (Familienrezepte)

Persönlicher Zugang zu eurem Tandoor — nicht systemweit. Gerichte bleiben dort; Mitai rechnet später Nährwerte. Token unter Tandoor → Einstellungen → API-Tokens anlegen.

setBaseUrl(e.target.value)} autoComplete="off" />
setToken(e.target.value)} autoComplete="new-password" />
{lastOk && (

Zuletzt erfolgreich: {String(lastOk).slice(0, 16).replace('T', ' ')}

)} {lastError && !msg && (

Letzter Fehler: {lastError}

)} {msg && (
{msg.text}
)}
{tokenSet && ( )}
) }