// Tide times display component import { useEffect, useState } from 'react'; import { format } from 'date-fns'; import type { TideData } from '@/types'; import { externalDataService } from '@/services/externalDataService'; interface TideDisplayProps { latitude: number; longitude: number; } export function TideDisplay({ latitude, longitude }: TideDisplayProps) { const [tideData, setTideData] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { let mounted = true; const fetchTides = async () => { try { setLoading(true); setError(null); const data = await externalDataService.getTides(latitude, longitude); if (mounted) { setTideData(data); } } catch (err) { if (mounted) { setError('Unable to load tide data'); } } finally { if (mounted) { setLoading(false); } } }; fetchTides(); return () => { mounted = false; }; }, [latitude, longitude]); if (loading) { return (
Loading tide data...
); } if (error || !tideData) { return (

Tide data unavailable

); } return (

🌊 Tide Times

{tideData.nextTide && (
Next Tide
{tideData.nextTide.type} Tide {format(new Date(tideData.nextTide.time), 'HH:mm')}
Height: {tideData.nextTide.height.toFixed(2)}m
)}
Today's Tides
{tideData.extremes && tideData.extremes.slice(0, 4).map((tide, index) => (
{tide.type === 'High' ? '⬆️' : '⬇️'}
{tide.type} Tide
{format(new Date(tide.time), 'HH:mm')}
{tide.height.toFixed(2)}m
))}
); }