import React,{ useState, useEffect } from 'react' import Spinner from 'react-native-loading-spinner-overlay'; import { StyleSheet, View, Platform, ImageBackground } from 'react-native' import { UpsellingPage as UpsellingPageController, useUtils, useLanguage } from 'ordering-components/native' import { OText, OModal, OButton, OImage } from '../shared' import { UpsellingProductsParams } from '../../types' import { Item, Details, CloseUpselling, CloseUpsellingLand } from './styles' import { ProductForm } from '../ProductForm'; import NavBar from '../NavBar'; import { Container } from '../../layouts/Container'; import GridContainer from '../../layouts/GridContainer'; import { PORTRAIT, useDeviceOrientation } from "../../../../../src/hooks/DeviceOrientation"; import { useTheme } from 'styled-components/native'; import FastImage from 'react-native-fast-image'; const UpsellingProductsUI = (props: UpsellingProductsParams) => { const { isCustomMode, upsellingProducts, business, handleUpsellingPage, openUpselling, canOpenUpselling, setCanOpenUpselling, onClose, resetInactivityTimeout, } = props const [actualProduct, setActualProduct] = useState(null) const [modalIsOpen, setModalIsOpen] = useState(false) const [{ parsePrice }] = useUtils() const [, t] = useLanguage() const [orientationState] = useDeviceOrientation(); const styles = StyleSheet.create({ imageStyle: { width: '100%', height: Platform.OS === 'ios' ? 250 : 180, resizeMode: Platform.OS === 'ios' ? 'contain' : 'cover', borderRadius: 10, }, closeUpsellingButton: { marginVertical: 10, marginHorizontal: 20, marginLeft: orientationState.orientation === PORTRAIT ? 20 : 0 }, upsellingModal: { height: '50%', top: 250 } }) useEffect(() => { if (!isCustomMode) { if (upsellingProducts?.products?.length && !upsellingProducts.loading) { setCanOpenUpselling && setCanOpenUpselling(true) } if ((!upsellingProducts?.products?.length && !upsellingProducts.loading && !canOpenUpselling && openUpselling) || (!upsellingProducts?.products?.length && !upsellingProducts.loading && openUpselling)) { handleUpsellingPage && handleUpsellingPage() } } }, [upsellingProducts.loading, upsellingProducts?.products.length]) const handleFormProduct = (product: any) => { if (props.onAddProduct) { onClose && onClose() props.onAddProduct(product) return } setActualProduct(product) setModalIsOpen(true) } const handleSaveProduct = () => { setActualProduct(null) setModalIsOpen(false) } const UpsellingLayout = () => { const theme = useTheme() const onClickProduct = (product: any) => { resetInactivityTimeout() if (props.onAddProduct) { onClose && onClose() props.onAddProduct(product) return } handleFormProduct(product) } return ( { !upsellingProducts.loading ? ( orientationState.orientation === PORTRAIT ? ( <> {t('DO_YOU_WANT', 'Do you want')} {'\n'} {t('SOMETHING_ELSE', 'something else')} {'?'} { !upsellingProducts.error ? upsellingProducts.products.map((product: any) => ( {product?.images ? ( ) : ( )}
{product.name} {parsePrice(product.price)} {product?.offer_price ? ` ${parsePrice(product?.offer_price)} ` : ''}
onClickProduct(product)} />
)) : ( {upsellingProducts.message} ) }
) : ( <> { !upsellingProducts.error ? upsellingProducts.products.map((product: any) => ( {!product?.inventoried && (
{product.name} {parsePrice(product.price)} {product?.offer_price ? parsePrice(product?.offer_price) : ''}
{ resetInactivityTimeout() handleFormProduct(product) }} />
)}
)) : ( {upsellingProducts.message} ) }
{t('DO_YOU_WANT', 'Do you want')} {'\n'} {t('SOMETHING_ELSE', 'something else')} {'?'} { resetInactivityTimeout() handleUpsellingPage() }} />
) ) : ( ) }
) }; return ( <> {isCustomMode ? ( ) : ( <> {!canOpenUpselling || upsellingProducts?.products?.length === 0 ? null : ( <> {!modalIsOpen && ( handleUpsellingPage()} entireModal customClose > {orientationState.orientation == PORTRAIT && ( handleUpsellingPage()} /> )} )} )} )} setModalIsOpen(false)} entireModal customClose > {actualProduct && ( handleSaveProduct()} onClose={() => setModalIsOpen(false)} /> )} ) } export const UpsellingProducts = (props : UpsellingProductsParams) => { const upsellingProductsProps = { ...props, UIComponent: UpsellingProductsUI } return ( ) }