UNPKG

mobility-toolbox-js

Version:

Toolbox for JavaScript applications in the domains of mobility and logistics.

29 lines (28 loc) 1.4 kB
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;