EverydayTech Platform - Developer Reference
Complete Source Code Documentation - All Applications
Loading...
Searching...
No Matches
MailgunCard.jsx
Go to the documentation of this file.
1import React, { useState } from 'react';
2
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('');
9
10 const handleSave = async () => {
11 setSaving(true);
12 setSaveStatus('');
13 try {
14 const res = await fetch(`/api/email/settings/${tenantId}`, {
15 method: 'POST',
16 headers: { 'Content-Type': 'application/json' },
17 body: JSON.stringify({
18 provider: 'mailgun',
19 mailgun: { apiKey, domain },
20 from
21 })
22 });
23 if (res.ok) {
24 setSaveStatus('Connected to Mailgun');
25 } else {
26 setSaveStatus('Failed to save Mailgun settings');
27 }
28 } catch (e) {
29 setSaveStatus('Error saving Mailgun settings');
30 }
31 setSaving(false);
32 };
33
34 return (
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">
39 <label>
40 API Key:
41 <input type="text" value={apiKey} onChange={e => setApiKey(e.target.value)} style={{ width: '240px' }} />
42 </label>
43 </div>
44 <div className="form-row">
45 <label>
46 Domain:
47 <input type="text" value={domain} onChange={e => setDomain(e.target.value)} style={{ width: '240px' }} />
48 </label>
49 </div>
50 <div className="form-row">
51 <label>
52 Sender Email:
53 <input type="text" value={from} onChange={e => setFrom(e.target.value)} style={{ width: '240px' }} />
54 </label>
55 </div>
56 <button onClick={handleSave} disabled={saving || loading} className="btn-primary">
57 {saving || loading ? 'Saving...' : 'Save Mailgun Settings'}
58 </button>
59 {(status || saveStatus) && (
60 <div className={`status-message ${(status || saveStatus).startsWith('Connected') ? 'success' : 'error'}`}>
61 {status || saveStatus}
62 </div>
63 )}
64 {config && (
65 <div className="current-config">
66 <b>Current config:</b> {JSON.stringify(config)}
67 </div>
68 )}
69 </div>
70 );
71}
72
73export default MailgunCard;