1import React, { useState } from 'react';
3function MailgunCard({ config, status, loading, onConfigure, tenantId }) {
4 const [apiKey, setApiKey] = useState(config?.mailgun?.apiKey || '');
5 const [domain, setDomain] = useState(config?.mailgun?.domain || '');
6 const [from, setFrom] = useState(config?.from || '');
7 const [saving, setSaving] = useState(false);
8 const [saveStatus, setSaveStatus] = useState('');
10 const handleSave = async () => {
14 const res = await fetch(`/api/email/settings/${tenantId}`, {
16 headers: { 'Content-Type': 'application/json' },
17 body: JSON.stringify({
19 mailgun: { apiKey, domain },
24 setSaveStatus('Connected to Mailgun');
26 setSaveStatus('Failed to save Mailgun settings');
29 setSaveStatus('Error saving Mailgun settings');
35 <div className="config-card">
36 <h3>Mailgun Integration</h3>
37 <p>Send emails via Mailgun for ticket notifications and alerts.</p>
38 <div className="form-row">
41 <input type="text" value={apiKey} onChange={e => setApiKey(e.target.value)} style={{ width: '240px' }} />
44 <div className="form-row">
47 <input type="text" value={domain} onChange={e => setDomain(e.target.value)} style={{ width: '240px' }} />
50 <div className="form-row">
53 <input type="text" value={from} onChange={e => setFrom(e.target.value)} style={{ width: '240px' }} />
56 <button onClick={handleSave} disabled={saving || loading} className="btn-primary">
57 {saving || loading ? 'Saving...' : 'Save Mailgun Settings'}
59 {(status || saveStatus) && (
60 <div className={`status-message ${(status || saveStatus).startsWith('Connected') ? 'success' : 'error'}`}>
61 {status || saveStatus}
65 <div className="current-config">
66 <b>Current config:</b> {JSON.stringify(config)}
73export default MailgunCard;