'use client' import { useEffect, useState } from 'react' import { RefreshCw } from 'lucide-react' /** * Visual indicator that shows when the page is syncing */ export default function SyncIndicator() { const [mounted, setMounted] = useState(false) const [isSyncing, setIsSyncing] = useState(false) const [lastSync, setLastSync] = useState(new Date()) useEffect(() => { setMounted(true) }, []) useEffect(() => { if (!mounted) return // Listen for router refresh events const handleSync = () => { setIsSyncing(true) setLastSync(new Date()) setTimeout(() => setIsSyncing(false), 500) } // Trigger on visibility change const handleVisibilityChange = () => { if (document.visibilityState === 'visible') { handleSync() } } document.addEventListener('visibilitychange', handleVisibilityChange) // Simulate sync indicator every second const interval = setInterval(handleSync, 1000) return () => { document.removeEventListener('visibilitychange', handleVisibilityChange) clearInterval(interval) } }, [mounted]) // Don't render on server to avoid hydration mismatch if (!mounted) { return null } return (
{isSyncing ? 'Syncing...' : `Last sync: ${lastSync.toLocaleTimeString()}`}
) }