import { useEffect, useState } from "react"; import SecaoHeader from "../components/SecaoHeader.jsx"; import { getBaseUrl, setBaseUrl, getApiKey, setApiKey, verificarSaude, listarEmailsCc, adicionarEmailCc, removerEmailCc, } from "../api.js"; export default function Config({ notificar, onConfigSalva }) { const [base, setBase] = useState(getBaseUrl()); const [key, setKey] = useState(getApiKey()); const [emailsCc, setEmailsCc] = useState([]); const [novoEmail, setNovoEmail] = useState(""); const [carregandoCc, setCarregandoCc] = useState(true); async function carregarEmailsCc() { setCarregandoCc(true); try { const d = await listarEmailsCc(); setEmailsCc(d.emails_cc || []); } catch (e) { notificar("Falha ao carregar e-mails em cópia: " + e.message, "bad"); } finally { setCarregandoCc(false); } } useEffect(() => { carregarEmailsCc(); // eslint-disable-next-line react-hooks/exhaustive-deps }, []); function salvarConexao() { setBaseUrl(base); setApiKey(key); notificar("Configuração salva", "ok"); onConfigSalva?.(); } async function testarConexao() { setBaseUrl(base); setApiKey(key); try { await verificarSaude(); notificar("Online ✓", "ok"); } catch { notificar("Sem conexão", "bad"); } onConfigSalva?.(); } async function handleAdicionarEmail(e) { e.preventDefault(); const email = novoEmail.trim(); if (!email) return; try { const d = await adicionarEmailCc(email); setEmailsCc(d.emails_cc || []); setNovoEmail(""); notificar("E-mail cadastrado em cópia", "ok"); } catch (err) { notificar(err.message, "bad"); } } async function handleRemoverEmail(email) { try { const d = await removerEmailCc(email); setEmailsCc(d.emails_cc || []); notificar("E-mail removido da cópia", "ok"); } catch (err) { notificar(err.message, "bad"); } } return ( <>
setBase(e.target.value)} />
setKey(e.target.value)} />
As telas leem os dados salvos no Turso (GET /day). Use ▶ Rodar para gerar um novo dia.
Além do destinatário principal (fixo, definido no Space), estes e-mails recebem cópia do relatório diário. Cadastrados aqui — persistidos no Turso, sem precisar de redeploy.
{carregandoCc ? (
Carregando…
) : emailsCc.length === 0 ? (
Nenhum e-mail em cópia cadastrado.
) : ( )}
setNovoEmail(e.target.value)} required />
); }