"use client"; import Link from "next/link"; import { motion, AnimatePresence } from "framer-motion"; import { X, ChevronLeft, ChevronRight } from "lucide-react"; import { useEffect, useState } from "react"; import { useRouter, useSearchParams } from "next/navigation"; import type { PublicArticle } from "@/lib/articles-public"; import { formatDate } from "@/utils/global"; import ArticleThumbnail from "@/components/landing-page/article-thumbnail"; function firstTag(tags: string | undefined): string { if (!tags?.trim()) return ""; const t = tags .split(",") .map((s) => s.trim()) .filter(Boolean)[0]; return t ?? ""; } function articleHref(a: PublicArticle) { return `/news/detail/${a.id}-${a.slug}`; } type Props = { featured: PublicArticle[]; defaultSearch?: string; }; export default function NewsAndServicesHeader({ featured, defaultSearch = "", }: Props) { const [activeHeader, setActiveHeader] = useState(0); const [activeModal, setActiveModal] = useState(0); const [open, setOpen] = useState(false); const [mounted, setMounted] = useState(false); const searchParams = useSearchParams(); const router = useRouter(); const slides = featured.length > 0 ? featured : []; const slideCount = slides.length; useEffect(() => { setMounted(true); }, []); useEffect(() => { if (!mounted) return; const highlight = searchParams.get("highlight"); if (highlight === "1" && slideCount > 0) { setActiveModal(activeHeader); setOpen(true); } }, [mounted, searchParams, activeHeader, slideCount]); const closeModal = () => { setOpen(false); router.replace("/news-services"); }; const headerPrev = () => { if (slideCount === 0) return; setActiveHeader((p) => (p === 0 ? slideCount - 1 : p - 1)); }; const headerNext = () => { if (slideCount === 0) return; setActiveHeader((p) => (p === slideCount - 1 ? 0 : p + 1)); }; const modalPrev = () => { if (slideCount === 0) return; setActiveModal((p) => (p === 0 ? slideCount - 1 : p - 1)); }; const modalNext = () => { if (slideCount === 0) return; setActiveModal((p) => (p === slideCount - 1 ? 0 : p + 1)); }; if (!mounted) return null; const current = slides[activeHeader]; const modalArticle = slides[activeModal]; return ( <>
{slideCount > 0 ? ( <> ) : null} {slideCount === 0 ? (

Berita & Layanan

Konten unggulan akan tampil di sini setelah artikel dipublikasikan dari CMS.

) : ( current && (
{slides.map((_, i) => ( ))}

{current.title}

{formatDate(current.publishedAt || current.createdAt)} {current.categoryName?.trim() || "Berita"} {firstTag(current.tags) ? ( <> {firstTag(current.tags)} ) : null}

{current.description}

Baca Selengkapnya
) )}
🔍
{open && slideCount > 0 && modalArticle && (

{modalArticle.title}

Buka halaman artikel
{slides.map((_, i) => (
)}
); }