import React, { useState } from 'react'; import { StyleSheet, View, TouchableOpacity, Platform } from 'react-native'; import { useUtils, useOrder, useLanguage, useSession, useConfig } from 'ordering-components/native'; import { useTheme } from 'styled-components/native'; import { OIcon, OText, OModal } from '../shared'; import { BusinessBasicInformationParams } from '../../types'; import { convertHoursToMinutes, getTypesText } from '../../utils'; import { BusinessInformation } from '../BusinessInformation'; import { BusinessReviews } from '../BusinessReviews'; import { BusinessContainer, BusinessHeader, BusinessLogo, BusinessInfo, BusinessInfoItem, WrapReviews, WrapBusinessInfo, AddressInput, OrderControlContainer, DropOptionButton, } from './styles'; import { Fade, Placeholder, PlaceholderLine } from 'rn-placeholder'; import { useSafeAreaInsets } from 'react-native-safe-area-context'; const types = ['food', 'laundry', 'alcohol', 'groceries']; export const BusinessBasicInformation = ( props: BusinessBasicInformationParams, ) => { const { navigation, businessState, isBusinessInfoShow, logo, header } = props; const { business, loading } = businessState; const theme = useTheme(); const [orderState] = useOrder(); const [{ auth }] = useSession() const [{ configs }] = useConfig(); const [, t] = useLanguage(); const [{ parsePrice, parseDistance, optimizeImage, parseDate }] = useUtils(); const [openBusinessInformation, setOpenBusinessInformation] = useState(false); const [openBusinessReviews, setOpenBusinessReviews] = useState(false); const { top, bottom } = useSafeAreaInsets() const configTypes = configs?.order_types_allowed?.value.split('|').map((value: any) => Number(value)) || []; const getBusinessType = () => { if (Object.keys(business).length <= 0) return t('GENERAL', 'General'); const _types: any = []; types.forEach( (type) => business[type] && _types.push( t(`BUSINESS_TYPE_${type?.replace(/\s/g, '_')?.toUpperCase()}`, type), ), ); return _types.join(', '); }; const onNavigationRedirect = (page: string, params: any) => { if (!page) return navigation.navigate(page, params); } return ( {!loading && auth ? navigation.navigate('AddressList', { isGoBack: true, isFromProductsList: true }) : navigation.navigate('AddressForm', { address: orderState.options?.address })} style={{marginTop: (!auth || props.isFranchiseApp) ? 36 : top > 0 ? 0 : 20}} activeOpacity={0.8} > {orderState?.options?.address?.address} navigation.navigate('OrderTypes', { configTypes: configTypes })}> {t(getTypesText(orderState?.options?.type || 1), 'Delivery')} navigation.navigate('MomentOption')}> {orderState.options?.moment ? parseDate(orderState.options?.moment, { outputFormat: configs?.format_time?.value === '12' ? 'MM/DD hh:mma' : 'MM/DD HH:mm', }) : t('ASAP_ABBREVIATION', 'ASAP')} } {loading ? ( ) : ( !isBusinessInfoShow && ( ) )} {loading ? ( ) : ( <> {business?.name} {!isBusinessInfoShow && ( onNavigationRedirect( 'BusinessInformation', { businessState, business } )} > )} )} {loading ? ( ) : ( {getBusinessType()} )} {loading && ( )} {`${t('DELIVERY_FEE', 'Delivery fee')} ${business && parsePrice(business?.delivery_price || 0)} \u2022 `} {orderState?.options?.type === 1 ? ( {convertHoursToMinutes(business?.delivery_time) + ` \u2022 `} ) : ( {convertHoursToMinutes(business?.pickup_time) + ` \u2022 `} )} {parseDistance(business?.distance || 0) + ` \u2022 `} {business?.reviews?.total} {!isBusinessInfoShow && ( <> navigation.navigate('MomentOption')}> {t('PRE_ORDER', 'Preorder')} {' \u2022 '} setOpenBusinessReviews(true)}> {t('REVIEWS', 'Reviews')} )} {/* setOpenBusinessInformation(false)} isNotDecoration> */} setOpenBusinessReviews(false)} isNotDecoration> ); }; const styles = StyleSheet.create({ businesInfoheaderStyle: { height: 150, paddingHorizontal: 40 }, headerStyle: { height: 260, paddingHorizontal: 40 }, businessLogo: { width: 72, height: 72, borderRadius: 7.6, justifyContent: 'flex-start', alignItems: 'flex-start', }, businessInfo: { paddingHorizontal: 40, paddingTop: 56, }, bullet: { flexDirection: 'row', alignItems: 'center', }, metadata: { marginRight: 2, }, starIcon: { marginHorizontal: 5, }, reviewStyle: { flexDirection: 'row', alignItems: 'center', justifyContent: 'center' }, modalTitleSectionStyle: { position: 'absolute', width: '100%', top: 0, zIndex: 100, left: 40 }, wrapperOrderOptions: { width: '100%', flexDirection: 'row', justifyContent: 'flex-start', marginBottom: 10, zIndex: 100, }, });