mirror of
https://gitlab.com/wheres-the-tp/ui-mobile.git
synced 2026-01-25 06:04:55 -06:00
28 lines
911 B
JavaScript
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());
|