aretherecookies-mobile/js/streams/PlacesStream.js
2017-07-23 19:58:10 -05:00

28 lines
911 B
JavaScript

// @flow
import { buildPlaceRecord } from '../records/PlaceRecord';
import { Map } from 'immutable';
import FoodItems$ 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$ = FoodItems$.mergeMap(foodItemMap => {
return foodItemMap.map(foodItem => foodItem.placeId).toArray();
}).distinct();
const placeRecords$ = uniquePlaceIds$.mergeMap(safeGetPlaceDetails).map(buildPlaceRecord);
export default placeRecords$.scan((accMap, place) => {
return accMap.set(place.id, place);
}, new Map());