import React, { useCallback, useState } from 'react'; import { Dimensions, Platform, View } from 'react-native'; import { useLanguage, useOrder, useUtils } from 'ordering-components/native'; import MaterialIcon from 'react-native-vector-icons/MaterialCommunityIcons' import { Container } from '../../layouts/Container'; import GridContainer from '../../layouts/GridContainer'; import NavBar from '../../components/NavBar'; import { OCard, OSegment, OText } from '../../components/shared'; import { CartBottomSheet } from '../../components/CartBottomSheet'; import { NotFoundSource } from '../NotFoundSource'; import { Category } from '../../types'; import { CartContent } from '../../components/CartContent'; import { TouchableOpacity } from 'react-native-gesture-handler'; import { LANDSCAPE, PORTRAIT, useDeviceOrientation } from '../../../../../src/hooks/DeviceOrientation'; import { useCartBottomSheet } from '../../providers/CartBottomSheetProvider'; import styled, { useTheme } from 'styled-components/native'; import { DrawerView } from '../DrawerView'; import { ProductForm } from '../ProductForm'; const CategoriesMenu = (props: any): React.ReactElement => { const { navigation, route, isDrawer } = props; const { category, categories, businessId, businessSlug, clearInactivityTimeout, resetInactivityTimeout }: Params = route.params; const theme = useTheme() const [, t] = useLanguage(); const [{ parsePrice }] = useUtils(); const [orientationState] = useDeviceOrientation(); const [bottomSheetVisibility, { showCartBottomSheet, hideCartBottomSheet }] = useCartBottomSheet(); const [productState, setProductState] = useState(null) const [productSelected, setProductSelected] = useState({}) const [curIndexCateg, setIndexCateg] = useState(categories.indexOf(category)); const [drawerState, setDrawerState] = useState({ isOpen: false, data: { order: null } }); const width_dimension = Dimensions.get('window').width; const height_dimension = Dimensions.get('window').height; const KeyboardView = styled.KeyboardAvoidingView` flex: 1; `; const onChangeTabs = (idx: number) => { resetInactivityTimeout(); setIndexCateg(idx); } const goToBack = () => navigation.goBack() const setDrawerValues = ({ isOpen, data }: any) => { setDrawerState({ ...drawerState, isOpen, data }); } const [{ carts }] = useOrder(); const cartsList = (carts && Object.values(carts).filter((cart: any) => cart.products.length > 0)) || []; const VISIBLE_CART_BOTTOM_SHEET_HEIGHT = orientationState?.dimensions?.height * (orientationState.orientation === PORTRAIT ? 0.5 : 1); let cart: any; if (cartsList?.length > 0) { cart = cartsList?.find((item: any) => item.business_id == businessId); } const onEditProduct = (product: any) => { setProductSelected({ ...product, _isEditProduct: true }) setDrawerValues({ isOpen: true, data: null }) } const onAddProduct = (product: any) => { setProductSelected(product) setDrawerValues({ isOpen: true, data: null }) } const cartProps = { ...props, cart, isOrderStateCarts: !!carts, onNavigationRedirect: (route: string, params: any) => props.navigation.navigate(route, params), CustomCartComponent: CartBottomSheet, extraPropsCustomCartComponent: { orientationState, height: VISIBLE_CART_BOTTOM_SHEET_HEIGHT, visible: bottomSheetVisibility, clearInactivityTimeout, resetInactivityTimeout, onEditProduct, onAddProduct }, showNotFound: false, showCartBottomSheet, } const onClickDrawer = () => { setDrawerValues({ isOpen: !drawerState.isOpen, data: null }) setProductState(null) } const onSaveProductForm = () => { showCartBottomSheet() onClickDrawer() } const onToggleCart = () => { if (bottomSheetVisibility) hideCartBottomSheet(); else showCartBottomSheet(); } const onProductStateChange = useCallback((val: any) => { setProductState({ ...productState, ...val }) }, [setProductState]) return ( <> {Platform.OS === 'android' && ()} {`${cart?.products?.length || 0} ${t('ITEMS', 'items')}`} {parsePrice(cart?.total || 0)} {' '} )} /> ({ text: category.name }))} selectedIdx={curIndexCateg} onSelectItem={onChangeTabs} /> {categories[curIndexCateg].products.map((product) => ( 0 && parsePrice(product?.offer_price)} style={{ borderRadius: 10, width: orientationState?.orientation === LANDSCAPE ? bottomSheetVisibility ? orientationState?.dimensions?.width * 0.145 :orientationState?.dimensions?.width * 0.16 : orientationState?.dimensions?.width * 0.20 }} onPress={() => { resetInactivityTimeout() if (isDrawer) { onAddProduct && onAddProduct(product) } else { navigation.navigate('ProductDetails', { businessId, businessSlug, product, }); } }} /> ))} {categories[curIndexCateg].products.length === 0 && ( )} ); }; interface Params { category: Category; categories: Category[]; businessId: string; businessSlug: string; clearInactivityTimeout: any; resetInactivityTimeout: any; } export default CategoriesMenu;