// @flow
import React from 'react';
import { View, Text, TouchableOpacity } from 'react-native';
import theme from '../ui-theme';
import { Divider } from 'react-native-material-ui';
import FoodItemRecord from '../records/FoodItemRecord';
import PlaceRecord from '../records/PlaceRecord';
import NameModal from '../modals/FoodItemNameModal';
import QuantityPicker from '../components/QuantityPicker';
import { compose, branch, withState, withHandlers, renderComponent, mapProps } from 'recompose';
import RNGooglePlaces from 'react-native-google-places';
import CategoryPicker from '../components/CategoryPicker';
import { ImageThumb, ImagePicker } from '../components/ImagePicker';
type GooglePlaceObject = {
placeID: string,
latitude: number,
longitude: number,
name: string,
address: string,
};
const fieldStyle = {
paddingTop: 10,
};
const fieldNameStyle = {
fontSize: 18,
paddingBottom: 10,
paddingLeft: 10,
};
const Field = ({ onPress, text = '' }: { onPress?: Function, text: string }) =>
{text}
;
const openPlaceModal = (onChoosePlace: (place: GooglePlaceObject) => void) => () => {
RNGooglePlaces.openAutocompleteModal({ type: 'establishment' }).then(onChoosePlace).catch(error => {
throw error;
});
};
type Props = {
foodItem: typeof FoodItemRecord,
setPropOfFoodItem: Function,
toggleNameModal: Function,
setFoodItem: Function,
setModalsVisible: Function,
place: typeof PlaceRecord,
setPlace: (place: typeof PlaceRecord) => void,
removeImageAtIndex: (i: number) => () => void,
updatePlace: (place: GooglePlaceObject) => void,
addImage: (uri: string) => void,
};
const CreateFoodItem = (props: Props) => {
const { foodItem, toggleNameModal, setPropOfFoodItem, place, updatePlace, removeImageAtIndex, addImage } = props;
return (
{foodItem.images.map((image, index) =>
)}
);
};
const enhanceNameModal = compose(
renderComponent,
mapProps(({ toggleNameModal, setPropOfFoodItem }: Props) => {
return {
onClose: toggleNameModal,
onUpdate: setPropOfFoodItem('name'),
};
})
);
export default compose(
withState('foodItem', 'setFoodItem', new FoodItemRecord()),
withState('place', 'setPlace', new PlaceRecord()),
withState('nameModalOpen', 'setNameModalOpen', false),
withHandlers({
setPropOfFoodItem: ({ foodItem, setFoodItem }: Props) => (prop: string) => (value: any) => {
setFoodItem(foodItem.set(prop, value));
},
addImage: ({ foodItem, setFoodItem }: Props) => (uri: string) => {
setFoodItem(foodItem.update('images', images => [uri].concat(images)));
},
removeImageAtIndex: ({ foodItem, setFoodItem }: Props) => (index: number) => () => {
setFoodItem(
foodItem.update('images', (images: Array) => {
images.splice(index, 1);
return images;
})
);
},
updatePlace: ({ setPlace, foodItem, setFoodItem }: Props) => ({
placeID,
latitude,
longitude,
name,
address,
phoneNumber,
website,
}) => {
setPlace(
new PlaceRecord({
id: placeID,
name,
address,
latitude,
longitude,
phoneNumber,
website,
})
);
setFoodItem(
foodItem.merge({
placeId: placeID,
latitude,
longitude,
})
);
},
toggleNameModal: ({ nameModalOpen, setNameModalOpen }) => () => setNameModalOpen(!nameModalOpen),
}),
branch(({ nameModalOpen }) => !!nameModalOpen, enhanceNameModal(NameModal))
)(CreateFoodItem);