import { useState, useEffect } from 'react' import { fetchAnalyse, setAnalyse } from '../lib/analyseApi' import { analyseStatus, textformLabel, canSubmitTextform, channelLabel, legalLinks, chatTemplate, privacyHint } from '../lib/analyseView' import { Badge, Button, Dialog, Field } from './ui' import { analyseColorTone } from './projectTones' // Kompakte Zeile "Website-Analyse" je Projekt (lädt beim Einbinden; mit key=Projekt-ID verwenden) export default function AnalyseRow({ projectId }) { const [data, setData] = useState(null) const [loadError, setLoadError] = useState('') const [mode, setMode] = useState(null) // null | 'on' | 'off' const [confirmed, setConfirmed] = useState(false) const [date, setDate] = useState('') const [channel, setChannel] = useState('') const [copied, setCopied] = useState(false) const [busy, setBusy] = useState(false) const [error, setError] = useState('') useEffect(() => { let cancelled = false fetchAnalyse(projectId) .then((r) => { if (!cancelled) setData(r) }) .catch((err) => { if (!cancelled) setLoadError(err.message) }) return () => { cancelled = true } }, [projectId]) const apply = async (on) => { setBusy(true) setError('') try { await setAnalyse(projectId, { on, textformDate: date, textformChannel: channel, audienceConfirmed: on }) setData(await fetchAnalyse(projectId)) setMode(null) setConfirmed(false) setDate('') setChannel('') } catch (err) { setError(err.message) } finally { setBusy(false) } } const cancel = () => { setMode(null); setConfirmed(false); setDate(''); setChannel(''); setError('') } const today = new Date().toLocaleDateString('sv-SE', { timeZone: 'Europe/Berlin' }) const minDate = data?.avvVersion || '' const privacyBlocked = data?.privacy?.ok === false const canSubmit = !privacyBlocked && canSubmitTextform({ confirmed, date, channel, today, minDate }) const copyTemplate = async () => { try { await navigator.clipboard.writeText(chatTemplate(data.avvVersion)) setCopied(true) setTimeout(() => setCopied(false), 2000) } catch { /* Kopieren nicht möglich: Text bleibt markierbar */ } } const status = analyseStatus(data) const label = data ? textformLabel(data.avvVersion) : null const links = data ? legalLinks(data.avvVersion) : null const dateId = `analyse-datum-${projectId}` const errorLine = error ?
{error}
: null return ( <>