perfect-postcode/frontend/src/hooks/useTravelModes.ts
2026-03-15 17:38:26 +00:00

34 lines
1 KiB
TypeScript

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<Set<TransportMode> | 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<TransportMode>(
data.modes.filter((m) => m.destinations > 0).map((m) => m.mode)
);
setAvailableModes(modes);
})
.catch((err) => logNonAbortError('travel modes', err));
return () => controller.abort();
}, []);
return availableModes;
}