'use client'; import LinkWithLoader from '@/components/LinkWithLoader'; import LinkWithStatus from '@/components/LinkWithStatus'; import Note from '@/components/Note'; import SiteGrid from '@/components/SiteGrid'; import Spinner from '@/components/Spinner'; import { PATH_ADMIN_CONFIGURATION, PATH_ADMIN_INSIGHTS, checkPathPrefix, isPathAdminInfo, isPathTopLevelAdmin, } from '@/app/paths'; import { useAppState } from '@/state/AppState'; import { clsx } from 'clsx/lite'; import { differenceInMinutes } from 'date-fns'; import { usePathname } from 'next/navigation'; import { useEffect, useMemo, useState } from 'react'; import { FaRegClock } from 'react-icons/fa'; import AdminAppInfoIcon from './AdminAppInfoIcon'; import AdminInfoNav from './AdminInfoNav'; // Updates considered recent if they occurred in past 5 minutes const areTimesRecent = (dates: Date[]) => dates .some(date => differenceInMinutes(new Date(), date) < 5); export default function AdminNavClient({ items, mostRecentPhotoUpdateTime, includeInsights = true, }: { items: { label: string, href: string, count: number, }[] mostRecentPhotoUpdateTime?: Date includeInsights?: boolean }) { const pathname = usePathname(); const { adminUpdateTimes = [] } = useAppState(); const updateTimes = useMemo(() => (mostRecentPhotoUpdateTime ? [mostRecentPhotoUpdateTime] : []) .concat(adminUpdateTimes) , [mostRecentPhotoUpdateTime, adminUpdateTimes]); const [hasRecentUpdates, setHasRecentUpdates] = useState(areTimesRecent(updateTimes)); useEffect(() => { // Check every 5 seconds if update times are recent setHasRecentUpdates(areTimesRecent(updateTimes)); const interval = setInterval(() => setHasRecentUpdates(areTimesRecent(updateTimes)) , 5_000); return () => clearInterval(interval); }, [updateTimes]); const shouldShowBanner = hasRecentUpdates && isPathTopLevelAdmin(pathname); return (
{items.map(({ label, href, count }) => {label} {count > 0 && ({count})} )}
} >
{shouldShowBanner && }> Photo updates detected—they may take several minutes to show up for visitors } {isPathAdminInfo(pathname) && } } /> ); }