// @flow import React from "react"; import { View, Text, ScrollView, RefreshControl } from "react-native"; import FoodItemTile from "../components/FoodItemTile"; import FoodItemList from "../components/FoodItemList"; import typeof FoodItemRecord from "../records/FoodItemRecord"; import { withFoodItemsAsSeq } from "../enhancers/foodItemEnhancers"; import { type SetSeq } from "immutable"; import { compose, pure, withState, withHandlers, lifecycle } from "recompose"; import { withFilter } from "../enhancers/filterEnhancers"; import { withRouterContext } from "../enhancers/routeEnhancers"; import FullScreenMessage from "../components/FullScreenMessage"; type Props = { foodItemsSeq: SetSeq, isRefreshing: boolean, onRefresh: () => Promise, onPulldown: () => {}, isFilterDirty: boolean }; const FoodList = (props: Props) => { const { foodItemsSeq, isRefreshing, onPulldown, isFilterDirty } = props; const refreshing = isRefreshing || !foodItemsSeq; const showNoResults = !isRefreshing && isFilterDirty && foodItemsSeq && !foodItemsSeq.size; return ( {showNoResults && ( No food matched your search. Check your filters and try again )} {!showNoResults && ( } > {(foodItem: FoodItemRecord) => } )} ); }; export default compose( pure, withRouterContext, withFoodItemsAsSeq, withFilter, 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(); } }) )(FoodList);