import React, { useState, useEffect } from 'react'; import { Cart as CartController, useOrder, useLanguage, useConfig, useUtils, useValidationFields, } from 'ordering-components/native'; import { BusinessInfoView, CContainer, CheckoutAction, HeaderNav, ProductsScroll } from './styles'; import { OSBill, OSTable, OSCoupon, OSTotal } from '../OrderSummary/styles'; import { ProductItemAccordion } from '../ProductItemAccordion'; import { BusinessItemAccordion } from '../BusinessItemAccordion'; import { CouponControl } from '../CouponControl'; import { OButton, OIcon, OModal, OText } from '../shared'; import { ProductForm } from '../ProductForm'; import { UpsellingProducts } from '../UpsellingProducts'; import { verifyDecimals } from '../../utils'; import { useTheme } from 'styled-components/native'; import { OrderSummary } from '../OrderSummary'; import { I18nManager, Platform, TouchableOpacity, View } from 'react-native'; import { FloatingButton } from '../FloatingButton'; const CartSingleUI = (props: any) => { const { navigation, route, cart, clearCart, changeQuantity, getProductMax, offsetDisabled, removeProduct, handleCartOpen, setIsCartsLoading, isExpanded } = props const theme = useTheme() const [, t] = useLanguage() const [orderState] = useOrder() const [{ configs }] = useConfig(); const [{ parsePrice, parseNumber, parseDate, optimizeImage }] = useUtils() const [validationFields] = useValidationFields() const [openProduct, setModalIsOpen] = useState(false) const [curProduct, setCurProduct] = useState(null) const [openUpselling, setOpenUpselling] = useState(false) const [canOpenUpselling, setCanOpenUpselling] = useState(false) const curCart: any = Object.values(orderState.carts).find((c: any) => c?.uuid === cart?.uuid) ?? {}; const isCartPending = curCart?.status === 2 const isCouponEnabled = validationFields?.fields?.checkout?.coupon?.enabled const momentFormatted = !orderState?.option?.moment ? t('RIGHT_NOW', 'Right Now') : parseDate(orderState?.option?.moment, { outputFormat: 'YYYY-MM-DD HH:mm' }) const handleDeleteClick = (product: any) => { removeProduct(product, curCart) } const handleEditProduct = (product: any) => { setCurProduct(product) setModalIsOpen(true) } const handlerProductAction = (product: any) => { if (Object.keys(product).length) { setModalIsOpen(false) } } const handleClearProducts = async () => { try { setIsCartsLoading && setIsCartsLoading(true) const result = await clearCart(curCart?.uuid) setIsCartsLoading && setIsCartsLoading(false) } catch (error) { setIsCartsLoading && setIsCartsLoading(false) } } const handleUpsellingPage = () => { setOpenUpselling(false) setCanOpenUpselling(false) props.onNavigationRedirect('CheckoutNavigator', { screen: 'CheckoutPage', cartUuid: curCart?.uuid, businessLogo: curCart?.business?.logo, businessName: curCart?.business?.name, cartTotal: curCart?.total }) } useEffect(() => { if (curCart?.total == 0) { navigation.goBack(); } }, [curCart]) return ( navigation.canGoBack() && navigation.goBack()}> {t('PERSONAL_CART', 'Personal cart')} {curCart?.business?.name} {parsePrice(curCart?.business?.minimum)} {curCart?.valid_products && ( = curCart?.minimum || !curCart?.minimum) && curCart?.valid_address ? ( !openUpselling !== canOpenUpselling ? t('GO_TO_CHECKOUT', 'Go to checkout') : t('LOADING', 'Loading') ) : !curCart?.valid_address ? ( `${t('OUT_OF_COVERAGE', 'Out of Coverage')}` ) : ( `${t('MINIMUN_SUBTOTAL_ORDER', 'Minimum subtotal order:')} ${parsePrice(curCart?.minimum)}` )} isSecondaryBtn={(curCart?.subtotal < curCart?.minimum || !curCart?.valid_address)} btnLeftValueShow={false} btnRightValueShow={curCart?.total > 0} btnRightValue={parsePrice(curCart?.total)} disabled={(openUpselling && !canOpenUpselling) || curCart?.subtotal < curCart?.minimum || !curCart?.valid_address} handleClick={() => setOpenUpselling(true)} inSafeArea /> )} setModalIsOpen(false)} > setModalIsOpen(false)} /> {openUpselling && ( )} ) } export const CartSingle = (props: any) => { const cartProps = { ...props, UIComponent: CartSingleUI } return ( ) }