diff --git a/js/components/ActionsButton.js b/js/components/ActionsButton.js
index c0306b1..aebae46 100644
--- a/js/components/ActionsButton.js
+++ b/js/components/ActionsButton.js
@@ -7,6 +7,8 @@ import queryString from 'query-string';
import { routeWithTitle } from '../helpers/RouteHelpers';
type Props = {
+ actions: Array<'add-food' | 'filter-modal' | 'view-mode'>,
+ icon: string,
viewMode: string,
actionPressed: Function,
toggleFilterModal: ?Function,
@@ -16,19 +18,24 @@ type Props = {
setViewMode: (mode: string) => void,
};
-const ActionsButton = ({ viewMode, actionPressed, toggleFilterModal }: Props) => {
+const actionDefs = {
+ 'add-food': () => ({ icon: 'add', label: 'Add New', name: 'add-food' }),
+ 'filter-modal': () => ({ icon: 'filter-list', label: 'Filter', name: 'filter-modal' }),
+ 'view-mode': props =>
+ props.viewMode === 'map'
+ ? { icon: 'list', label: 'View list', name: 'list-view' }
+ : { icon: 'map', label: 'View map', name: 'map-view' },
+};
+
+const ActionsButton = (props: Props) => {
+ const actions = (props.actions || []).map(action => actionDefs[action](props));
+
return (
);
};
@@ -55,21 +62,19 @@ export default compose(
},
}),
withHandlers({
- actionPressed: ({ addFoodItem, setViewMode, toggleFilterModal }: Props) => (
- action: ?String
- ) => {
+ actionPressed: (props: Props) => (action: ?String) => {
switch (action) {
- case 'add':
- addFoodItem();
+ case 'add-food':
+ props.addFoodItem();
break;
- case 'filter':
- toggleFilterModal && toggleFilterModal();
+ case 'filter-modal':
+ props.toggleFilterModal && props.toggleFilterModal();
break;
- case 'map':
- setViewMode('map');
+ case 'map-view':
+ props.setViewMode('map');
break;
- case 'list':
- setViewMode('list');
+ case 'list-view':
+ props.setViewMode('list');
break;
default:
break;
diff --git a/js/pages/Food.js b/js/pages/Food.js
index a456a88..90bd5d6 100644
--- a/js/pages/Food.js
+++ b/js/pages/Food.js
@@ -1,5 +1,5 @@
// @flow
-import { compose, branch, withState } from 'recompose';
+import { compose, branch, withState, withHandlers } from 'recompose';
import FoodList from './FoodList';
import FoodMap from './FoodMap';
import { withRouterContext, withViewMode, withPushRoute } from '../enhancers/routeEnhancers';
@@ -8,7 +8,12 @@ export default compose(
withRouterContext,
withViewMode,
withPushRoute,
- withState('isFilterModalOpen', 'toggleFilterModal', false),
+ withState('isFilterModalOpen', 'setFilterModalOpen', false),
+ withHandlers({
+ toggleFilterModal: ({ isFilterModalOpen, setFilterModalOpen }) => () => {
+ setFilterModalOpen(!isFilterModalOpen);
+ },
+ }),
branch(({ viewMode }) => {
return viewMode === 'map';
}, FoodMap)
diff --git a/js/pages/FoodList.js b/js/pages/FoodList.js
index 8fa8b0d..918d015 100644
--- a/js/pages/FoodList.js
+++ b/js/pages/FoodList.js
@@ -24,20 +24,21 @@ class FoodList extends Component {
props: {
isFilterModalOpen: boolean,
- toggleFilterModal: (val: boolean) => void,
+ toggleFilterModal: () => void,
foodItemsSeq: SetSeq,
isRefreshing: boolean,
onRefresh: () => Promise,
onPulldown: () => {},
};
- toggleFilterModal = () => {
- const { isFilterModalOpen, toggleFilterModal } = this.props;
- toggleFilterModal(!isFilterModalOpen);
- };
-
render() {
- const { isFilterModalOpen, foodItemsSeq, isRefreshing, onPulldown } = this.props;
+ const {
+ isFilterModalOpen,
+ foodItemsSeq,
+ isRefreshing,
+ onPulldown,
+ toggleFilterModal,
+ } = this.props;
const refreshing = isRefreshing || !foodItemsSeq;
@@ -48,8 +49,12 @@ class FoodList extends Component {
refreshControl={}>
-
-
+
+
);
}
diff --git a/js/pages/FoodMap.js b/js/pages/FoodMap.js
index 56a8fd9..86ec471 100644
--- a/js/pages/FoodMap.js
+++ b/js/pages/FoodMap.js
@@ -13,8 +13,7 @@ import { withPlaces } from '../enhancers/placeEnhancers';
import typeof PlaceRecord from '../records/PlaceRecord';
import FoodItemTile from '../components/FoodItemTile';
import ActionsButton from '../components/ActionsButton';
-
-// import theme from '../ui-theme';
+import FilterModal from '../modals/FilterModal';
type Region = {
latitude: number,
@@ -30,6 +29,8 @@ type Props = {
region: Region,
onRegionChange: Region => void,
pushRoute: () => {},
+ toggleFilterModal: () => void,
+ isFilterModalOpen: boolean,
};
const FoodMap = ({
@@ -38,6 +39,8 @@ const FoodMap = ({
region,
onRegionChange,
pushRoute,
+ toggleFilterModal,
+ isFilterModalOpen,
}: Props) => {
return (
@@ -67,7 +70,12 @@ const FoodMap = ({
})
.toList()}
-
+
+
);
};