mirror of
https://github.com/public-transport/db-vendo-client.git
synced 2025-02-23 15:19:35 +02:00
63 lines
1.6 KiB
JavaScript
63 lines
1.6 KiB
JavaScript
const findById = (needle) => {
|
|
const needleStopId = needle.id;
|
|
const needleStationId = needle.station
|
|
? needle.station.id
|
|
: null;
|
|
|
|
return (stop) => {
|
|
if (needleStopId === stop.id) {
|
|
return true;
|
|
}
|
|
const stationId = stop.station
|
|
? stop.station.id
|
|
: null;
|
|
if (needleStationId && stationId && needleStationId === stationId) {
|
|
return true;
|
|
}
|
|
// todo: `needleStationId === stop.id`? `needleStopId === stationId`?
|
|
return false;
|
|
};
|
|
};
|
|
|
|
const sliceLeg = (leg, from, to) => {
|
|
if (!Array.isArray(leg.stopovers)) {
|
|
throw new Error('leg.stopovers must be an array.');
|
|
}
|
|
|
|
const stops = leg.stopovers.map(st => st.stop);
|
|
const fromI = stops.findIndex(findById(from));
|
|
if (fromI === -1) {
|
|
throw new Error('from not found in stopovers');
|
|
}
|
|
const fromStopover = leg.stopovers[fromI];
|
|
|
|
const toI = stops.findIndex(findById(to));
|
|
if (toI === -1) {
|
|
throw new Error('to not found in stopovers');
|
|
}
|
|
const toStopover = leg.stopovers[toI];
|
|
|
|
if (fromI === 0 && toI === leg.stopovers.length - 1) {
|
|
return leg;
|
|
}
|
|
const newLeg = Object.assign({}, leg);
|
|
newLeg.stopovers = leg.stopovers.slice(fromI, toI + 1);
|
|
|
|
newLeg.origin = fromStopover.stop;
|
|
newLeg.departure = fromStopover.departure;
|
|
newLeg.departureDelay = fromStopover.departureDelay;
|
|
newLeg.scheduledDeparture = fromStopover.scheduledDeparture;
|
|
newLeg.departurePlatform = fromStopover.departurePlatform;
|
|
|
|
newLeg.destination = toStopover.stop;
|
|
newLeg.arrival = toStopover.arrival;
|
|
newLeg.arrivalDelay = toStopover.arrivalDelay;
|
|
newLeg.scheduledArrival = toStopover.scheduledArrival;
|
|
newLeg.arrivalPlatform = toStopover.arrivalPlatform;
|
|
|
|
return newLeg;
|
|
};
|
|
|
|
export {
|
|
sliceLeg,
|
|
};
|