diff --git a/app/src/pages/AuthorsListPage.jsx b/app/src/pages/AuthorsListPage.jsx new file mode 100644 index 0000000..f3fbb9c --- /dev/null +++ b/app/src/pages/AuthorsListPage.jsx @@ -0,0 +1,65 @@ +import { useState, useEffect } from 'react'; +import { TeknavData } from '../../teknav-data.js'; +import { useNav, AuthorAvatar, EmptyState } from '../../teknav-ui.jsx'; +import { contentApi } from '../../src/lib/content-api.js'; +import { authorProfilePath } from './shared.jsx'; + +export function AuthorsListPage() { + const { navigate } = useNav(); + const [authors, setAuthors] = useState(() => contentApi.fallbackAuthors()); + const [articles, setArticles] = useState(() => contentApi.fallbackArticles()); + useEffect(() => { + let cancelled = false; + Promise.all([ + contentApi.listAuthors().catch(() => null), + contentApi.listArticles({ limit: 100 }).catch(() => null), + ]).then(([authorRows, articleRows]) => { + if (cancelled) return; + if (authorRows) setAuthors(authorRows); + if (articleRows?.items) setArticles(articleRows.items); + }); + return () => { cancelled = true; }; + }, []); + return ( +
متخصصانی که روایت عمیق فناوری را مینویسند
+{author.bio.slice(0, 120)}…
+ {latestArt && ( +