'use client'; import { useState, useEffect, useCallback, Suspense } from 'react'; import { useRouter } from 'next/navigation'; import dynamic from 'next/dynamic'; import { Collection } from '@/lib/types'; import { useAuth } from '@/components/AuthProvider'; import BottomNav from '@/components/BottomNav'; import LocationTracker from '@/components/LocationTracker'; import { getAssignedCollections, isAuthenticated } from '@/lib/pocketbase'; import { cn } from '@/lib/utils'; import { RefreshCw, MapPin, AlertCircle } from 'lucide-react'; // Dynamic import for Leaflet to avoid SSR issues const CollectionMap = dynamic(() => import('@/components/CollectionMap'), { ssr: false, loading: () => (
), }); export default function MapPage() { const router = useRouter(); const { isLoggedIn, isLoading: authLoading } = useAuth(); const [collections, setCollections] = useState([]); const [isLoading, setIsLoading] = useState(true); const [isRefreshing, setIsRefreshing] = useState(false); const [error, setError] = useState(''); useEffect(() => { if (!authLoading && !isLoggedIn) { router.push('/login/'); } }, [isLoggedIn, authLoading, router]); const loadCollections = useCallback(async (showLoading = true) => { if (!isAuthenticated()) return; if (showLoading) setIsLoading(true); setError(''); try { const data = await getAssignedCollections(); setCollections(data); } catch (err) { console.error('Failed to load collections:', err); setError('Failed to load collections'); } finally { setIsLoading(false); setIsRefreshing(false); } }, []); useEffect(() => { loadCollections(); }, [loadCollections]); const handleNavigate = (lat: number, lng: number, name: string) => { const isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent); let url: string; if (isIOS) { url = `maps://maps.apple.com/?q=${encodeURIComponent(name)}&ll=${lat},${lng}`; } else { url = `https://www.google.com/maps?q=${lat},${lng}`; } window.open(url, '_blank'); }; if (authLoading) { return (
); } if (!isLoggedIn) { return null; } return (
{/* Header */}

Collection Map

{collections.length} stops
{/* Map */}
{isLoading ? (
) : error ? (

{error}

) : collections.length === 0 ? (

No collections to show

All collections completed!

) : (
} >
)}
); }