From c4cb89261ea5fd5d7a5b67841c08fe0d8837e934 Mon Sep 17 00:00:00 2001 From: arsam Date: Fri, 18 Sep 2026 23:25:23 +0330 Subject: [PATCH] Import source: app/src/pages/NewsletterArchivePage Import the existing local project snapshot. This commit organizes existing files; it does not represent newly developed functionality. --- app/src/pages/NewsletterArchivePage.jsx | 37 +++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 app/src/pages/NewsletterArchivePage.jsx diff --git a/app/src/pages/NewsletterArchivePage.jsx b/app/src/pages/NewsletterArchivePage.jsx new file mode 100644 index 0000000..56db3e7 --- /dev/null +++ b/app/src/pages/NewsletterArchivePage.jsx @@ -0,0 +1,37 @@ +import { useState, useEffect } from 'react'; +import { useNav, EmptyState, pillBtn } from '../../teknav-ui.jsx'; +import { contentApi } from '../../src/lib/content-api.js'; + +export function NewsletterArchivePage() { + const { navigate } = useNav(); + const [items, setItems] = useState([]); + const [loading, setLoading] = useState(true); + + useEffect(() => { + let cancelled = false; + contentApi.listNewsletterArchive() + .then((rows) => { if (!cancelled) setItems(rows); }) + .catch(() => { if (!cancelled) setItems([]); }) + .finally(() => { if (!cancelled) setLoading(false); }); + return () => { cancelled = true; }; + }, []); + + return ( +
+
+

آرشیو خبرنامه تکنـاو

+

نسخه‌های ارسال‌شده خبرنامه برای دنبال کردن روندهای مهم فناوری، هوش مصنوعی و امنیت.

+ {loading ?
در حال بارگذاری...
: items.length === 0 ? : ( +
+ {items.map((item) => ( + + ))} +
+ )} +
+
+ ); +}