digitransit-ui/app/util/occupancyUtil.js

71 lines
1.8 KiB
JavaScript

import { legTime } from './legUtils';
/**
* Maps status to corresponding string.
*
* @param {*} status status from OTP.
*/
export function mapStatus(status) {
switch (status) {
case 'EMPTY':
return 'MANY_SEATS_AVAILABLE';
case 'NOT_ACCEPTING_PASSENGERS':
return 'CRUSHED_STANDING_ROOM_ONLY';
case 'MANY_SEATS_AVAILABLE':
return 'MANY_SEATS_AVAILABLE';
case 'FEW_SEATS_AVAILABLE':
return 'FEW_SEATS_AVAILABLE';
case 'STANDING_ROOM_ONLY':
return 'STANDING_ROOM_ONLY';
case 'CRUSHED_STANDING_ROOM_ONLY':
return 'CRUSHED_STANDING_ROOM_ONLY';
case 'FULL':
return 'CRUSHED_STANDING_ROOM_ONLY';
default:
return 'NO_DATA_AVAILABLE';
}
}
/**
* Checks that departure is within 10 minutes from now.
*
* @param {*} departureTime departure time in Unix.
*/
export function isDepartureWithinTenMinutes(departureTime) {
const now = Date.now();
const diff = (departureTime - now) / (60 * 1000); // to minutes
return diff > 0 && diff < 10;
}
/**
* Returns mapped capacity string.
* @param {*} config configuration object.
* @param {*} occupancyStatus status from OTP.
* @param {*} departureTime departure time in Unix.
*/
export function getCapacity(config, occupancyStatus, departureTime) {
if (
config.useRealtimeTravellerCapacities &&
occupancyStatus &&
occupancyStatus !== 'NO_DATA_AVAILABLE' &&
isDepartureWithinTenMinutes(departureTime)
) {
return mapStatus(occupancyStatus);
}
return null;
}
/**
* Returns capacity string for leg.
*
* @param {*} config configuration object.
* @param {*} leg leg object.
*/
export function getCapacityForLeg(config, leg) {
return getCapacity(
config,
leg.trip?.occupancy?.occupancyStatus,
legTime(leg.start),
);
}