import { useState, useEffect } from "react"; import { trpc } from "~/lib/trpc/client.js"; import { InfoTooltip } from "~/components/ui/InfoTooltip.js"; import { CHECKBOX_ROW_CLASS, INPUT_CLASS, LABEL_CLASS, PANEL_CLASS, PRIMARY_BUTTON_CLASS, SECONDARY_BUTTON_CLASS, RuntimeSecretCard, type RuntimeSecrets, type SaveResult, } from "./shared.js"; type SmtpSettingsPanelProps = { initialSettings: { smtpHost: string | null; smtpPort: number | null; smtpUser: string | null; smtpFrom: string | null; smtpTls: boolean | null; runtimeSecrets: { smtpPassword: RuntimeSecrets["smtpPassword"] }; }; onSettingsSaved: () => void; }; export function SmtpSettingsPanel({ initialSettings, onSettingsSaved }: SmtpSettingsPanelProps) { const [smtpHost, setSmtpHost] = useState(""); const [smtpPort, setSmtpPort] = useState(587); const [smtpUser, setSmtpUser] = useState(""); const [smtpFrom, setSmtpFrom] = useState(""); const [smtpTls, setSmtpTls] = useState(true); const [saved, setSaved] = useState(false); const [testResult, setTestResult] = useState(null); useEffect(() => { setSmtpHost(initialSettings.smtpHost ?? ""); setSmtpPort(initialSettings.smtpPort ?? 587); setSmtpUser(initialSettings.smtpUser ?? ""); setSmtpFrom(initialSettings.smtpFrom ?? ""); setSmtpTls(initialSettings.smtpTls ?? true); }, [initialSettings]); const saveMutation = trpc.settings.updateSystemSettings.useMutation({ onSuccess: () => { setSaved(true); setTestResult(null); onSettingsSaved(); setTimeout(() => setSaved(false), 3000); }, }); const testMutation = trpc.settings.testSmtpConnection.useMutation({ onSuccess: (data) => setTestResult(data), onError: (error) => setTestResult({ ok: false, error: error.message }), }); function handleSave() { saveMutation.mutate({ smtpHost: smtpHost || undefined, smtpPort, smtpUser: smtpUser || undefined, smtpFrom: smtpFrom || undefined, smtpTls, }); } return (

Email Notifications (SMTP){" "}

Used to send email notifications when vacation requests are approved or rejected.

setSmtpHost(event.target.value)} placeholder="smtp.example.com" />
setSmtpPort(parseInt(event.target.value, 10))} min={1} max={65535} />
setSmtpUser(event.target.value)} placeholder="user@example.com" autoComplete="off" />
setSmtpFrom(event.target.value)} placeholder="noreply@capakraken.app" />
setSmtpTls(event.target.checked)} className="rounded border-gray-300 text-brand-600" />
{saved ? ( Saved! ) : null} {testResult ? ( {testResult.ok ? "\u2713 Connection successful" : `\u2717 ${testResult.error}`} ) : null}
); }