"use client"; import { useState, useEffect } from "react"; import ContentThumbnailTemplate from "./ContentThumbnailTemplate"; export default function RelatedArticles({ relatedPosts, currentPostSlug }) { // Filter out the current post from related posts const filteredPosts = relatedPosts.filter( (post) => post.slug !== currentPostSlug, ); const [currentIndex, setCurrentIndex] = useState(0); const [progress, setProgress] = useState(0); const [isMobile, setIsMobile] = useState(true); // Check if we're on mobile (below lg breakpoint) useEffect(() => { const checkScreenSize = () => { setIsMobile(window.innerWidth < 1024); // lg breakpoint is 1024px }; checkScreenSize(); window.addEventListener("resize", checkScreenSize); return () => window.removeEventListener("resize", checkScreenSize); }, []); // Auto-advance every 3 seconds (only on mobile) useEffect(() => { if (filteredPosts.length <= 1 || !isMobile) return; const interval = setInterval(() => { setProgress(0); setCurrentIndex((prev) => (prev + 1) % filteredPosts.length); }, 3000); return () => clearInterval(interval); }, [filteredPosts.length, isMobile]); // Progress animation (only on mobile) useEffect(() => { if (filteredPosts.length <= 1 || !isMobile) return; const progressInterval = setInterval(() => { setProgress((prev) => { if (prev >= 100) { return 0; } return prev + 1; }); }, 30); // 30ms intervals for smooth animation return () => clearInterval(progressInterval); }, [currentIndex, filteredPosts.length, isMobile]); if (filteredPosts.length === 0) { return null; } return (

Related Articles

{/* Horizontal Articles Row - Carousel on mobile, Scrollable slider on desktop */}
{ const slider = e.currentTarget; const startX = e.pageX - slider.offsetLeft; const scrollLeft = slider.scrollLeft; const handleMouseMove = (e) => { const x = e.pageX - slider.offsetLeft; const walk = (x - startX) * 2; slider.scrollLeft = scrollLeft - walk; }; const handleMouseUp = () => { document.removeEventListener( "mousemove", handleMouseMove, ); document.removeEventListener("mouseup", handleMouseUp); }; document.addEventListener("mousemove", handleMouseMove); document.addEventListener("mouseup", handleMouseUp); } : undefined } > {filteredPosts.map((relatedPost, index) => (
))}
{/* Progress bars - only show on mobile */} {isMobile && (
{filteredPosts.map((relatedPost, index) => (
))}
)}
); }