// ============================================================
// HOME — WSJ-style editorial cover
// ============================================================
function Home() {
const [articles, setArticles] = useState(null);
const [categories, setCategories] = useState([]);
const [email, setEmail] = useState('');
const [subscribed, setSubscribed] = useState(false);
useEffect(() => {
api.listArticles({ status: 'published' }).then(setArticles);
api.listCategories().then(setCategories);
}, []);
if (!articles) {
return (
);
}
const featured = articles.find(a => a.featured) || articles[0];
const rest = articles.filter(a => a.id !== featured?.id);
const lead = rest.slice(0, 4); // grid top — 4 cards
const popular = articles.slice(0, 6); // mais lidas list
// by category
const byCat = (id) => articles.filter(a => a.category === id).slice(0, 3);
return (
{/* HERO: featured + mais lidas rail */}
A MANCHETE DE HOJE
{featured.subtitle}
Por {featured.author}
{fmtDate(featured.publishedAt, { long: true })}
· {readingTime(featured.body)} min
{/* Last news strip */}
{/* WhatsApp consultation strip */}
{/* Featured categories */}
Editorias
Áreas de atuação criminal
{/* Category bands */}
{categories.slice(0, 4).map(c => {
const list = byCat(c.id);
if (!list.length) return null;
return (
);
})}
{/* Newsletter */}
A Carta Semanal
Receba uma análise jurídica
em sua caixa, toda quarta.
Casos comentados, decisões recentes do STF e do STJ, e ensaios
do Dr. Angelo Santos. Sem ruído. Sem propaganda.
);
}
// ---------- Category page ----------
function CategoryPage({ slug }) {
const [articles, setArticles] = useState(null);
const [categories, setCategories] = useState([]);
useEffect(() => {
api.listCategories().then(setCategories);
}, []);
useEffect(() => {
const cat = categories.find(c => c.slug === slug);
if (cat) {
api.listArticles({ status: 'published', category: cat.id }).then(setArticles);
} else if (categories.length) {
setArticles([]);
}
}, [slug, categories]);
const cat = categories.find(c => c.slug === slug);
return (
Editoria
{cat?.name || 'Editoria'}
{cat?.blurb}
{!articles ? (
Carregando…
) : articles.length === 0 ? (
Nenhum artigo publicado nesta editoria ainda.
) : (
)}
);
}
Object.assign(window, { Home, CategoryPage });