import React, { useState } from 'react';
import {
View,
Text,
StyleSheet,
Image,
TouchableOpacity,
FlatList,
GestureResponderEvent,
} from 'react-native';
import { X as CloseIcon } from 'react-native-feather';
import { useNavigation } from '@react-navigation/native';
import { addToCart } from '../store/cart';
import type {
CartItem,
Pizza as PizzaType,
Topping as ToppingType,
} from '../config/types';
import toppings from '../data/toppings';
import { Button, Checkbox, Pager } from '../components';
import { useAppDispatch } from '../store/hooks';
import theme from '../config/theme';
const styles = StyleSheet.create({
container: {
flex: 1,
},
content: {
marginTop: 20,
marginHorizontal: 20,
},
title: {
fontWeight: '700',
fontSize: 30,
},
description: {
color: theme.colors.description,
fontSize: 12,
marginBottom: 24,
},
image: {
width: '100%',
height: 200,
},
topping: {
height: 48,
width: '100%',
display: 'flex',
flexDirection: 'row',
backgroundColor: theme.colors.bg,
alignItems: 'center',
justifyContent: 'space-between',
paddingHorizontal: 16,
},
toppingText: {
color: theme.colors.text,
fontSize: 16,
},
closeIcon: {
position: 'absolute',
top: 50,
right: 20,
},
list: {
marginHorizontal: 8,
},
button: {
position: 'absolute',
bottom: 100,
alignSelf: 'center',
},
});
const PIZZA_CLOSEUP =
'https://images.unsplash.com/photo-1513104890138-7c749659a591?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxzZWFyY2h8Mnx8cGl6emF8ZW58MHx8MHx8&auto=format&fit=crop&w=900&q=60';
type Selection = {
selected: boolean;
};
type ToppingsListOption = ToppingType & Selection;
const renderTopping: React.FC<{
item: ToppingsListOption;
onPress: (event: GestureResponderEvent) => void;
}> = ({
item,
onPress,
}: {
item: ToppingsListOption;
onPress: (event: GestureResponderEvent) => void;
}) => {
return (
{item.name}
);
};
const Pizza = ({
route: {
params: { pizza },
},
}: {
route: { params: { pizza: PizzaType } };
}) => {
const emptyOptions: string[] = [];
const [selectedOptions, setSelectedOptions] =
useState(emptyOptions);
const { title, description } = pizza;
const navigation = useNavigation();
const dispatch = useAppDispatch();
const handleAddToCart = () => {
const selectedToppings: ToppingType[] = toppings.filter((t: ToppingType) =>
selectedOptions.includes(t.name)
);
const cartItem: CartItem = {
pizza,
toppings: selectedToppings,
price: 20,
quantity: 1,
};
dispatch(addToCart(cartItem));
navigation.goBack();
};
const toppingsList: ToppingsListOption[] = toppings.map((t: ToppingType) => ({
...t,
selected: selectedOptions.includes(t.name),
}));
const toggleOption = (name: string) => {
const isSelected = selectedOptions.includes(name);
if (isSelected) {
// Remove option
const newOptions = selectedOptions.filter((o: string) => o !== name);
setSelectedOptions(newOptions);
} else {
// Add option
const newOptions = [...selectedOptions, name];
setSelectedOptions(newOptions);
}
};
return (
{title}
{description}
renderTopping({
item,
onPress: () => toggleOption(item.name),
})
}
/>
),
},
{
title: 'Reviews',
content: ,
},
]}
/>
navigation.goBack()}
>
);
};
export default Pizza;