ice-frontend-react-mobx
Version:
ICE Frontend REACT+MobX
69 lines (53 loc) • 1.39 kB
JavaScript
const debug = require('debug')('ice:pollers:feeds');
import { Feed } from '../models/Feed';
export default class FeedsPoller {
map = null;
io = null;
api = null;
interval = null;
constructor (map, io, api) {
this.map = map;
this.io = io;
this.api = api;
}
startPolling () {
debug('Starting feed polling');
this.interval = setInterval(this.poll, 500);
}
stopPolling () {
debug('Stopping feed polling');
clearInterval(this.interval);
}
poll = () => {
return this.api.getFeeds().then((json) => {
this.updateFromJson(json);
}).catch((error) => {
this.pollError(error);
});
}
updateFromJson (json) {
if (Array.isArray(json)) {
let newIds = [];
json.forEach((feedJson) => {
let id = feedJson.id;
newIds.push(id);
let feed = this.map.get(id);
if (!feed) {
feed = new Feed(this.io);
this.map.set(id, feed);
}
feed.updateFromJson(feedJson);
});
let deleteIds = Array.from(this.map.keys()).filter((id) => (newIds.indexOf(id) === -1));
deleteIds.forEach((id) => {
this.map.get(id).dispose();
this.map.delete(id);
});
} else {
debug('Error updating feeds from json, json is not an array.');
}
}
pollError (error) {
debug('Error polling feeds:', error);
}
}