diff --git a/app/src/pages/SeriesPage.jsx b/app/src/pages/SeriesPage.jsx new file mode 100644 index 0000000..4a63c2f --- /dev/null +++ b/app/src/pages/SeriesPage.jsx @@ -0,0 +1,51 @@ +import { useState, useEffect } from 'react'; +import { useNav, EmptyState, pillBtn } from '../../teknav-ui.jsx'; +import { ArticleRow } from '../../teknav-articles.jsx'; +import { contentApi } from '../../src/lib/content-api.js'; + +export function SeriesPage({ slug }) { + const { navigate } = useNav(); + const [series, setSeries] = useState(null); + const [error, setError] = useState(false); + + useEffect(() => { + let cancelled = false; + setError(false); + contentApi.getSeries(slug) + .then((item) => { if (!cancelled) setSeries(item); }) + .catch(() => { if (!cancelled) setError(true); }); + return () => { cancelled = true; }; + }, [slug]); + + if (error) { + return ( +
+ +
+ ); + } + + if (!series) { + return
در حال بارگذاری...
; + } + + return ( +
+
+ +

{series.title}

+ {series.description &&

{series.description}

} + {(series.articles ?? []).length === 0 ? : ( +
+ {series.articles.map((item, index) => ( +
+
{(item.position ?? index + 1).toLocaleString('fa-IR')}
+ +
+ ))} +
+ )} +
+
+ ); +}