aretherecookies-mobile/js/streams/PlacesStream.js
2017-07-22 16:28:05 -05:00

26 lines
857 B
JavaScript

// @flow
import { buildPlaceRecord } from '../records/PlaceRecord';
import { Map } from 'immutable';
import { foodItemsRaw$ } from './FoodItemsStream';
import { getPlaceDetails } from '../apis/PlaceDetailsApi';
import { memoize } from 'ramda';
/**
* return a promise of a place details object
* if already requested return existing promise
* swallow exceptions so as not to break the stream
*/
const safeGetPlaceDetails = memoize(placeId => {
return getPlaceDetails(placeId).catch(error => {
console.log(error); // eslint-disable-line no-console
return {};
});
});
const uniquePlaceIds$ = foodItemsRaw$.map(({ placeId }) => placeId).distinct();
const placeRecords$ = uniquePlaceIds$.mergeMap(safeGetPlaceDetails).map(buildPlaceRecord);
export default placeRecords$.scan((accMap, place) => {
return accMap.set(place.id, place);
}, new Map());