import React, { useState, useEffect } from "react"; import { Card, Text, Grid, Button } from "@tremor/react"; import { Typography, message, Divider, Spin, Checkbox } from "antd"; import { getEmailEventSettings, updateEmailEventSettings, resetEmailEventSettings } from "../networking"; import { EmailEvent } from "../../types"; import { EmailEventSetting } from "./types"; const { Title } = Typography; interface EmailEventSettingsProps { accessToken: string | null; } const EmailEventSettings: React.FC = ({ accessToken, }) => { const [loading, setLoading] = useState(true); const [eventSettings, setEventSettings] = useState([]); // Fetch email event settings on component mount useEffect(() => { fetchEventSettings(); }, [accessToken]); const fetchEventSettings = async () => { if (!accessToken) return; setLoading(true); try { const response = await getEmailEventSettings(accessToken); setEventSettings(response.settings); } catch (error) { console.error("Failed to fetch email event settings:", error); message.error("Failed to fetch email event settings"); } finally { setLoading(false); } }; const handleCheckboxChange = (event: EmailEvent, checked: boolean) => { const updatedSettings = eventSettings.map(setting => setting.event === event ? { ...setting, enabled: checked } : setting ); setEventSettings(updatedSettings); }; const handleSaveSettings = async () => { if (!accessToken) return; try { await updateEmailEventSettings(accessToken, { settings: eventSettings }); message.success("Email event settings updated successfully"); } catch (error) { console.error("Failed to update email event settings:", error); message.error("Failed to update email event settings"); } }; const handleResetSettings = async () => { if (!accessToken) return; try { await resetEmailEventSettings(accessToken); message.success("Email event settings reset to defaults"); // Refresh settings after reset fetchEventSettings(); } catch (error) { console.error("Failed to reset email event settings:", error); message.error("Failed to reset email event settings"); } }; // Helper function to get a description for each event type const getEventDescription = (event: EmailEvent): string => { // Convert event name to a sentence with more context if (event.includes("Virtual Key Created")) { return "An email will be sent to the user when a new virtual key is created with their user ID"; } else if (event.includes("New User Invitation")) { return "An email will be sent to the email address of the user when a new user is created"; } else { // Handle any other event type from the API const words = event.split(/(?=[A-Z])/).join(' ').toLowerCase(); return `Receive an email notification when ${words}`; } }; return ( Email Notifications Select which events should trigger email notifications. {loading ? (
) : (
{eventSettings.map((setting) => (
handleCheckboxChange(setting.event, e.target.checked)} />
{setting.event}
{getEventDescription(setting.event)}
))}
)}
); }; export default EmailEventSettings;