// @flow import React from "react"; import { View, ScrollView, RefreshControl } from "react-native"; import PlaceTile from "../components/PlaceTile"; import { compose, pure, withState, withHandlers, lifecycle } from "recompose"; import { withFoodItemsGroupedByPlace } from "../enhancers/foodItemEnhancers"; import { withPlaces } from "../enhancers/placeEnhancers"; import { Map, List } from "immutable"; import typeof FoodItemRecord from "../records/FoodItemRecord"; import typeof PlaceRecord from "../records/PlaceRecord"; import { withRouterContext } from "../enhancers/routeEnhancers"; type Props = { foodItemsByPlace: Map>, places: ?Map, onRefresh: () => Promise, onPulldown: () => {}, isRefreshing: boolean, viewMode: string }; const byDistance = (left: PlaceRecord, right: PlaceRecord) => left.distance - right.distance; const PlacesList = ({ foodItemsByPlace = Map(), places, isRefreshing, onPulldown }: Props) => { const refreshing = isRefreshing || !places; return ( }> {places && places .sort(byDistance) .map((place: PlaceRecord, placeId: string) => { const foodItems = foodItemsByPlace.get(placeId, new List()); return ; }) .toList()} ); }; export default compose( pure, withFoodItemsGroupedByPlace, withPlaces, withRouterContext, withState("isRefreshing", "setRefreshing", false), withHandlers({ onPulldown: ({ setRefreshing, onRefresh, router }) => async () => { try { setRefreshing(true); await onRefresh(); } catch (error) { console.error(error); // eslint-disable-line no-console router.history.push("/zipcode"); } finally { setTimeout(() => setRefreshing(false), 1000); } } }), lifecycle({ componentDidMount() { this.props.onPulldown(); } }) )(PlacesList);