import { useState, useEffect } from 'react'; import { useParams } from 'react-router-dom'; import apiClient from '../api/client'; import { useBusiness } from '../context/BusinessContext'; export default function GlobalSms() { const { businessId } = useParams(); const { setHasGlobalSms } = useBusiness(); const [loading, setLoading] = useState(true); const [profiles, setProfiles] = useState([]); const [activeProfileId, setActiveProfileId] = useState(null); const [saving, setSaving] = useState(false); const [error, setError] = useState(''); const [success, setSuccess] = useState(''); // Form state for Create / Edit const [editingId, setEditingId] = useState(null); const [formName, setFormName] = useState(''); const [formCurl, setFormCurl] = useState(''); const [formSetActive, setFormSetActive] = useState(true); useEffect(() => { loadProfiles(); }, [businessId]); async function loadProfiles() { try { setLoading(true); const res = await apiClient.get(`/api/businesses/${businessId}/global-sms/profiles`); setProfiles(res.data.profiles || []); setActiveProfileId(res.data.activeProfileId); if (res.data.activeProfileId) { setHasGlobalSms(true); } } catch (err) { setError('Failed to load cURL profiles'); } finally { setLoading(false); } } function handleAddClick() { setEditingId(null); setFormName(''); setFormCurl(''); setFormSetActive(profiles.length === 0); setError(''); setSuccess(''); } function handleEditClick(profile) { setEditingId(profile.id); setFormName(profile.name); setFormCurl(profile.rawCurl); setFormSetActive(false); // only matters for create setError(''); setSuccess(''); } async function handleSubmit(e) { e.preventDefault(); if (!formName.trim() || !formCurl.trim()) return; setSaving(true); setError(''); setSuccess(''); try { if (editingId) { await apiClient.patch(`/api/businesses/${businessId}/global-sms/profiles/${editingId}`, { name: formName, rawCurl: formCurl, }); setSuccess('Profile updated successfully.'); } else { await apiClient.post(`/api/businesses/${businessId}/global-sms/profiles`, { name: formName, rawCurl: formCurl, setActive: formSetActive, }); setSuccess('Profile created successfully.'); } await loadProfiles(); setFormName(''); setFormCurl(''); setEditingId(null); } catch (err) { setError(err.response?.data?.error || 'Failed to save cURL profile'); } finally { setSaving(false); } } async function handleDelete(id) { if (!window.confirm('Delete this cURL profile?')) return; try { await apiClient.delete(`/api/businesses/${businessId}/global-sms/profiles/${id}`); await loadProfiles(); } catch (err) { setError(err.response?.data?.error || 'Failed to delete profile'); } } async function handleActivate(id) { try { await apiClient.post(`/api/businesses/${businessId}/global-sms/profiles/${id}/activate`); await loadProfiles(); } catch (err) { setError(err.response?.data?.error || 'Failed to activate profile'); } } if (loading) { return (
Manage the cURL commands used to generate and test SMS templates. The active profile will be used across the application.
Updated: {new Date(p.updatedAt).toLocaleString()}
{p.rawCurl}
No cURL profiles configured yet.