diff --git a/app/src/admin/NewsletterPanel.jsx b/app/src/admin/NewsletterPanel.jsx new file mode 100644 index 0000000..5ddd630 --- /dev/null +++ b/app/src/admin/NewsletterPanel.jsx @@ -0,0 +1,42 @@ +import { useState, useEffect } from 'react'; +import { useToast, inputStyle, pillBtn } from '../../teknav-ui.jsx'; +import { adminApi } from '../lib/admin-api.js'; +import { BRAND } from './Shared.jsx'; + +function NewsletterPanel() { + const toast = useToast(); + const [campaigns, setCampaigns] = useState([]); + const [subscribers, setSubscribers] = useState([]); + const [subject, setSubject] = useState(''); + const [bodyHtml, setBodyHtml] = useState(''); + const load = () => Promise.all([adminApi.listNewsletterCampaigns(), adminApi.listNewsletterSubscribers()]).then(([c, s]) => { setCampaigns(c); setSubscribers(s); }); + useEffect(() => { load().catch(() => {}); }, []); + const create = async (e) => { + e.preventDefault(); + await adminApi.createNewsletterCampaign({ subject, bodyHtml }); + setSubject(''); + setBodyHtml(''); + toast('کمپین خبرنامه ذخیره شد'); + load(); + }; + const send = async (id) => { await adminApi.sendNewsletterCampaign(id); toast('کمپین ارسال شد'); load(); }; + return ( +
+
مشترکان واقعی API: {subscribers.length.toLocaleString('fa-IR')}
+
+ setSubject(e.target.value)} placeholder="موضوع کمپین" style={inputStyle} dir="rtl" /> +