"use client"; import { ReactNode, useEffect, useRef, useState } from "react"; import { useUrlRewriter } from "../../hooks/url.rewriter"; import { ModuleWithPermissions } from "../../permissions"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "../../shadcnui"; export type PageContainerItems = { title: string; content: ReactNode; }; type PageContainerContentDetailsProps = { items: PageContainerItems[]; section?: string; module: ModuleWithPermissions; id: string; }; export function PageContainerContentDetails({ items, section, module, id }: PageContainerContentDetailsProps) { const rewriteUrl = useUrlRewriter(); const [isScrolled, setIsScrolled] = useState(false); const sentinelRef = useRef(null); // Use IntersectionObserver to detect when content scrolls past the TabsList useEffect(() => { const sentinel = sentinelRef.current; if (!sentinel) return; const observer = new IntersectionObserver( ([entry]) => { // When sentinel is not visible (scrolled past), show border setIsScrolled(!entry.isIntersecting); }, { threshold: 0, rootMargin: "0px", }, ); observer.observe(sentinel); return () => { observer.disconnect(); }; }, []); return ( rewriteUrl({ page: module, id: id, childPage: a })} > {/* Sentinel element - invisible, used to detect scroll position */}
{/* Sticky TabsList with conditional border */}
{items.map((item) => ( {item.title} ))}
{items.map((item) => ( {item.content} ))}
); }