UNPKG

openf1-hooks

Version:

React Query hooks for the OpenF1 API

253 lines (239 loc) 6.23 kB
// src/hooks/useCarData.ts import { useQuery } from "@tanstack/react-query"; // src/client.ts var API_BASE_URL = "https://api.openf1.org/v1"; var cleanParams = (params) => { const cleaned = {}; for (const key in params) { if (params[key] !== void 0 && params[key] !== null) { cleaned[key] = String(params[key]); } } return cleaned; }; var fetchData = async (endpoint, params) => { const url = new URL(`${API_BASE_URL}${endpoint}`); if (params) { const cleaned = cleanParams(params); url.search = new URLSearchParams(cleaned).toString(); } try { const response = await fetch(url.toString()); if (!response.ok) { let errorData = null; try { errorData = await response.json(); } catch (jsonError) { } console.error( `API error fetching ${endpoint}: Status ${response.status} ${response.statusText}`, errorData ); throw new Error( errorData?.message || `HTTP error ${response.status}: ${response.statusText}` || "An unknown API error occurred" ); } const data = await response.json(); return data; } catch (error) { if (error instanceof Error) { console.error(`Error fetching ${endpoint}:`, error.message); throw error; } else { console.error(`Unexpected error fetching ${endpoint}:`, error); throw new Error("An unexpected error occurred during fetch"); } } }; // src/hooks/useCarData.ts var getCarDataQueryKey = (params) => [ "carData", params ]; var useCarData = (params, options) => { const queryKey = getCarDataQueryKey(params); return useQuery({ queryKey, queryFn: () => fetchData("/car_data", params), ...options // Spread the rest of the options }); }; // src/hooks/useDrivers.ts import { useQuery as useQuery2 } from "@tanstack/react-query"; var getDriversQueryKey = (params) => [ "drivers", params ]; var useDrivers = (params, options) => { const queryKey = getDriversQueryKey(params); return useQuery2({ queryKey, queryFn: () => fetchData("/drivers", params), ...options }); }; // src/hooks/useIntervals.ts import { useQuery as useQuery3 } from "@tanstack/react-query"; var getIntervalsQueryKey = (params) => [ "intervals", params ]; var useIntervals = (params, options) => { const queryKey = getIntervalsQueryKey(params); return useQuery3({ queryKey, queryFn: () => fetchData("/intervals", params), ...options }); }; // src/hooks/useLaps.ts import { useQuery as useQuery4 } from "@tanstack/react-query"; var getLapsQueryKey = (params) => ["laps", params]; var useLaps = (params, options) => { const queryKey = getLapsQueryKey(params); return useQuery4({ queryKey, queryFn: () => fetchData("/laps", params), ...options }); }; // src/hooks/useLocation.ts import { useQuery as useQuery5 } from "@tanstack/react-query"; var getLocationQueryKey = (params) => [ "location", params ]; var useLocation = (params, options) => { const queryKey = getLocationQueryKey(params); return useQuery5({ queryKey, queryFn: () => fetchData("/location", params), ...options }); }; // src/hooks/useMeetings.ts import { useQuery as useQuery6 } from "@tanstack/react-query"; var getMeetingsQueryKey = (params) => [ "meetings", params ]; var useMeetings = (params, options) => { const queryKey = getMeetingsQueryKey(params); return useQuery6({ queryKey, queryFn: () => fetchData("/meetings", params), ...options }); }; // src/hooks/usePit.ts import { useQuery as useQuery7 } from "@tanstack/react-query"; var getPitQueryKey = (params) => ["pit", params]; var usePit = (params, options) => { const queryKey = getPitQueryKey(params); return useQuery7({ queryKey, queryFn: () => fetchData("/pit", params), ...options }); }; // src/hooks/usePosition.ts import { useQuery as useQuery8 } from "@tanstack/react-query"; var getPositionQueryKey = (params) => [ "position", params ]; var usePosition = (params, options) => { const queryKey = getPositionQueryKey(params); return useQuery8({ queryKey, queryFn: () => fetchData("/position", params), ...options }); }; // src/hooks/useRaceControl.ts import { useQuery as useQuery9 } from "@tanstack/react-query"; var getRaceControlQueryKey = (params) => [ "raceControl", params ]; var useRaceControl = (params, options) => { const queryKey = getRaceControlQueryKey(params); return useQuery9({ queryKey, queryFn: () => fetchData("/race_control", params), ...options }); }; // src/hooks/useSessions.ts import { useQuery as useQuery10 } from "@tanstack/react-query"; var getSessionsQueryKey = (params) => [ "sessions", params ]; var useSessions = (params, options) => { const queryKey = getSessionsQueryKey(params); return useQuery10({ queryKey, queryFn: () => fetchData("/sessions", params), ...options }); }; // src/hooks/useStints.ts import { useQuery as useQuery11 } from "@tanstack/react-query"; var getStintsQueryKey = (params) => [ "stints", params ]; var useStints = (params, options) => { const queryKey = getStintsQueryKey(params); return useQuery11({ queryKey, queryFn: () => fetchData("/stints", params), ...options }); }; // src/hooks/useTeamRadio.ts import { useQuery as useQuery12 } from "@tanstack/react-query"; var getTeamRadioQueryKey = (params) => [ "teamRadio", params ]; var useTeamRadio = (params, options) => { const queryKey = getTeamRadioQueryKey(params); return useQuery12({ queryKey, queryFn: () => fetchData("/team_radio", params), ...options }); }; // src/hooks/useWeather.ts import { useQuery as useQuery13 } from "@tanstack/react-query"; var getWeatherQueryKey = (params) => [ "weather", params ]; var useWeather = (params, options) => { const queryKey = getWeatherQueryKey(params); return useQuery13({ queryKey, queryFn: () => fetchData("/weather", params), ...options }); }; export { useCarData, useDrivers, useIntervals, useLaps, useLocation, useMeetings, usePit, usePosition, useRaceControl, useSessions, useStints, useTeamRadio, useWeather }; //# sourceMappingURL=index.mjs.map