import { useState, useEffect } from 'react'; import apiClient from '../api/client'; export default function WhitelistModal({ businessId, template, onClose, onSuccess }) { const [templateId, setTemplateId] = useState(''); const [toNumber, setToNumber] = useState(''); const [saving, setSaving] = useState(false); const [error, setError] = useState(''); const [providers, setProviders] = useState(null); const [form, setForm] = useState({ providerName: '', senderId: '', dltEntityId: '' }); const [loadingProviders, setLoadingProviders] = useState(true); useEffect(() => { async function fetchProviders() { try { const res = await apiClient.get(`/api/businesses/${businessId}/providers`); setProviders(res.data || {}); setForm({ providerName: res.data?.providerName || '', senderId: res.data?.senderId || '', dltEntityId: res.data?.dltEntityId || '' }); } catch { setProviders({}); } finally { setLoadingProviders(false); } } fetchProviders(); }, [businessId]); async function handleSubmit(e) { e.preventDefault(); if (!templateId.trim() || !toNumber.trim()) return; setSaving(true); setError(''); try { await apiClient.post(`/api/businesses/${businessId}/templates/${template.eventSlug}/publish`, { templateId: templateId.trim(), toNumber: toNumber.trim(), providerName: form.providerName, senderId: form.senderId.toUpperCase(), dltEntityId: form.dltEntityId }); onSuccess(template.eventSlug, templateId.trim()); } catch (err) { if (err.response?.data?.missingFields) { setError(`Missing provider fields: ${err.response.data.missingFields.join(', ')}`); } else { setError(err.response?.data?.error || 'Failed to publish template'); } } finally { setSaving(false); } } const missingName = !providers?.providerName; const missingSender = !providers?.senderId; const missingDlt = !providers?.dltEntityId; const hasMissingProviders = missingName || missingSender || missingDlt; return (

Publish Template

Provide your DLT details and a test number to publish:

{template.eventLabel || template.eventSlug.replace(/_/g, ' ')}

{error && (
{error}
)} {loadingProviders ? (
) : (
setTemplateId(e.target.value)} placeholder="e.g. 1234567890987654321" className="w-full px-4 py-2.5 rounded-lg bg-page-bg border border-border-main font-mono text-text-primary placeholder-placeholder-bg focus:outline-none focus:ring-2 focus:ring-primary-blue text-sm" autoFocus required />
setToNumber(e.target.value)} placeholder="e.g. 919876543210" className="w-full px-4 py-2.5 rounded-lg bg-page-bg border border-border-main font-mono text-text-primary placeholder-placeholder-bg focus:outline-none focus:ring-2 focus:ring-primary-blue text-sm" required />

Number to send the initial request on publish

{hasMissingProviders && (

You MUST provide missing provider details before publishing.

{missingName && (
setForm({ ...form, providerName: e.target.value })} className="w-full px-3 py-2 rounded border border-border-main bg-surface-white text-sm" required />
)} {missingSender && (
setForm({ ...form, senderId: e.target.value.toUpperCase() })} maxLength={6} className="w-full px-3 py-2 rounded border border-border-main bg-surface-white text-sm font-mono uppercase" required />
)} {missingDlt && (
setForm({ ...form, dltEntityId: e.target.value })} className="w-full px-3 py-2 rounded border border-border-main bg-surface-white text-sm font-mono" required />
)}
)}
)}
); }