mobility-toolbox-js
Version:
Toolbox for JavaScript applications in the domains of mobility and logistics.
29 lines (28 loc) • 1.4 kB
JavaScript
import sortAndFilterDepartures from './sortAndFilterDepartures';
/**
* This function returns a WebSocket api callback, and call the onDeparturesUpdate function with the list of current departures to display.
* @param {function(departures: RealtimeDeparture[])} onDeparturesUpdate callback when list of departures changes, called after 100 ms
* @param {boolean} [sortByMinArrivalTime = true] Sort departures by arrival time
* @param {number} [maxDepartureAge = 30] max departure age of departures in minutes
* @param {number} [timeout = 100] debounce timeout in ms
* @private
*/
const debounceDeparturesMessages = (onDeparturesUpdate, sortByMinArrivalTime = false, maxDepartureAge = 30, timeout = 100) => {
const departureUpdateTimeout = {};
const departureObject = {};
return (data) => {
const { content: departure, source } = data;
if (departureUpdateTimeout[source]) {
window.clearTimeout(departureUpdateTimeout[source]);
}
if (!departure) {
return;
}
departureObject[departure.call_id] = departure;
departureUpdateTimeout[source] = window.setTimeout(() => {
const departures = sortAndFilterDepartures(departureObject, sortByMinArrivalTime || false, maxDepartureAge);
onDeparturesUpdate(departures);
}, timeout);
};
};
export default debounceDeparturesMessages;