UI improvements

This commit is contained in:
Andras Schmelczer 2026-03-15 09:02:10 +00:00
parent 83dd2ca87e
commit 1569d116a9
14 changed files with 222 additions and 92 deletions

View file

@ -0,0 +1,34 @@
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;
}