// ─── ARCHIVE PAGE ──────────────────────────────────────────────────────────
// Editorial list: big typography + small tile. Search + service filter.
function ArchiveHero({ count }) {
const isMobile = useIsMobile(900);
return (
Alle podcasts · {count}
Podcasts waar we trots op zijn.
Een greep uit producties voor partners, makers en eigen titels.
);
}
function FilterBar({ query, setQuery, serviceFilter, setServiceFilter }) {
const isMobile = useIsMobile(900);
const services = window.SPRAAKMAKER_SERVICES || [];
return (
{services.map(s => (
))}
);
}
function CaseRow({ c, index }) {
const isMobile = useIsMobile(900);
const [hover, setHover] = React.useState(false);
return (
setHover(true)}
onMouseLeave={() => setHover(false)}>
{c.client}
{c.title}
{!isMobile && (
{c.summary}
)}
{!isMobile && (
{c.services.slice(0, 3).map(slug => (
{getServiceLabel(slug)}
))}
{c.services.length > 3 && (
+{c.services.length - 3}
)}
)}
{!isMobile && (
)}
);
}
function ArchiveList({ cases }) {
if (cases.length === 0) {
return (
Geen podcasts gevonden voor deze filter.
);
}
return (
);
}
async function loadCases() {
return window.SPRAAKMAKER_CASES || [];
}
function ArchivePage() {
const [scrolled, setScrolled] = React.useState(false);
const [query, setQuery] = React.useState('');
const [serviceFilter, setServiceFilter] = React.useState(null);
const [cases, setCases] = React.useState(null);
React.useEffect(() => { loadCases().then(setCases); }, []);
React.useEffect(() => {
const onScroll = () => setScrolled(window.scrollY > 40);
window.addEventListener('scroll', onScroll, { passive: true });
return () => window.removeEventListener('scroll', onScroll);
}, []);
const all = (cases || []).filter(c => c.published !== false);
const filtered = all.filter(c => {
if (serviceFilter && !c.services.includes(serviceFilter)) return false;
if (query) {
const q = query.toLowerCase();
return c.title.toLowerCase().includes(q) || c.client.toLowerCase().includes(q);
}
return true;
});
return (
<>
>
);
}
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render();