'use client' import { useState } from 'react' import { formatNumber } from '@/lib/utils/format' import { TopPage } from '@/lib/api/stats' import { Modal } from '@ciphera-net/ui' import { FiExternalLink } from 'react-icons/fi' interface ContentStatsProps { topPages: TopPage[] entryPages: TopPage[] exitPages: TopPage[] domain: string collectPagePaths?: boolean } type Tab = 'top_pages' | 'entry_pages' | 'exit_pages' const LIMIT = 7 export default function ContentStats({ topPages, entryPages, exitPages, domain, collectPagePaths = true }: ContentStatsProps) { const [activeTab, setActiveTab] = useState('top_pages') const [isModalOpen, setIsModalOpen] = useState(false) // Filter out generic "/" entries when page paths are disabled (all traffic shows as "/") const filterGenericPaths = (pages: TopPage[]) => { if (!collectPagePaths) return [] // Filter out pages that are just "/" with high traffic (indicator of disabled tracking) return pages.filter(p => p.path && p.path !== '') } const getData = () => { switch (activeTab) { case 'top_pages': return filterGenericPaths(topPages) case 'entry_pages': return filterGenericPaths(entryPages) case 'exit_pages': return filterGenericPaths(exitPages) default: return [] } } const data = getData() const hasData = data && data.length > 0 const displayedData = hasData ? data.slice(0, LIMIT) : [] const emptySlots = Math.max(0, LIMIT - displayedData.length) const showViewAll = hasData && data.length > LIMIT const getTabLabel = (tab: Tab) => { switch (tab) { case 'top_pages': return 'Top Pages' case 'entry_pages': return 'Entry' case 'exit_pages': return 'Exit' } } return ( <>

Content

{showViewAll && ( )}
{(['top_pages', 'entry_pages', 'exit_pages'] as Tab[]).map((tab) => ( ))}
{!collectPagePaths ? (

Page path tracking is disabled in site settings

) : hasData ? ( <> {displayedData.map((page, index) => (
{page.path}
{formatNumber(page.pageviews)}
))} {Array.from({ length: emptySlots }).map((_, i) => (
setIsModalOpen(false)} title={`Content - ${getTabLabel(activeTab)}`} >
{data.map((page, index) => (
{formatNumber(page.pageviews)}
))}
) }