mirror of
https://github.com/HSLdevcom/digitransit-ui
synced 2025-07-28 08:05:18 +02:00
41 lines
1.1 KiB
JavaScript
41 lines
1.1 KiB
JavaScript
import { useCallback } from 'react';
|
|
import { fetchQuery } from 'react-relay';
|
|
import { legTime } from '../../../../util/legUtils';
|
|
import { legQuery } from '../../queries/LegQuery';
|
|
|
|
/**
|
|
* Custom hook to query and map real-time legs.
|
|
* @param {Object} relayEnvironment - Relay environment for GraphQL queries.
|
|
* @returns {Function} A function to query and map real-time legs.
|
|
*/
|
|
const useQueryRealtimeLegs = relayEnvironment => {
|
|
const queryAndMapRealtimeLegs = useCallback(
|
|
async (legs, now) => {
|
|
if (!legs.length) {
|
|
return {};
|
|
}
|
|
|
|
const legQueries = legs
|
|
.filter(leg => leg.transitLeg && legTime(leg.end) > now)
|
|
.map(leg =>
|
|
fetchQuery(
|
|
relayEnvironment,
|
|
legQuery,
|
|
{ id: leg.legId },
|
|
{ force: true },
|
|
).toPromise(),
|
|
);
|
|
|
|
const responses = await Promise.all(legQueries);
|
|
return responses.reduce(
|
|
(map, response) => ({ ...map, [response.leg.legId]: response.leg }),
|
|
{},
|
|
);
|
|
},
|
|
[relayEnvironment],
|
|
);
|
|
|
|
return queryAndMapRealtimeLegs;
|
|
};
|
|
|
|
export default useQueryRealtimeLegs;
|