import { useState, useEffect } from 'react'; import { logNonAbortError } from '../lib/api'; import type { TransportMode } from './useTravelTime'; interface TravelModeInfo { mode: TransportMode; destinations: number; } /** Fetches which transport modes have precomputed travel time data. */ export function useTravelModes() { const [availableModes, setAvailableModes] = useState | null>(null); useEffect(() => { const controller = new AbortController(); fetch('/api/travel-modes', { signal: controller.signal }) .then((res) => { if (!res.ok) throw new Error(`HTTP ${res.status}`); return res.json(); }) .then((data: { modes: TravelModeInfo[] }) => { const modes = new Set( data.modes.filter((m) => m.destinations > 0).map((m) => m.mode) ); setAvailableModes(modes); }) .catch((err) => logNonAbortError('travel modes', err)); return () => controller.abort(); }, []); return availableModes; }