ordering-ui-react-native 0.22.26 → 0.22.27-release
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +6 -7
- package/src/DeliveryApp.tsx +43 -1
- package/src/components/BusinessesListing/index.tsx +1 -1
- package/src/components/Checkout/index.tsx +40 -39
- package/src/components/StripeMethodForm/index.tsx +4 -2
- package/src/components/VerifyPhone/styles.tsx +1 -2
- package/src/context/OfflineActions/index.tsx +236 -0
- package/src/types/index.tsx +2 -1
- package/themes/business/index.tsx +2 -0
- package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +9 -6
- package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +1 -0
- package/themes/business/src/components/BusinessController/index.tsx +8 -3
- package/themes/business/src/components/BusinessProductList/index.tsx +3 -2
- package/themes/business/src/components/Chat/index.tsx +15 -3
- package/themes/business/src/components/DriverMap/index.tsx +49 -26
- package/themes/business/src/components/FloatingButton/index.tsx +3 -2
- package/themes/business/src/components/GoogleMap/index.tsx +15 -8
- package/themes/business/src/components/LanguageSelector/index.tsx +1 -4
- package/themes/business/src/components/LoginForm/index.tsx +123 -98
- package/themes/business/src/components/LogoutButton/index.tsx +1 -1
- package/themes/business/src/components/MapView/index.tsx +36 -17
- package/themes/business/src/components/NewOrderNotification/index.tsx +38 -19
- package/themes/business/src/components/OrderDetails/Business.tsx +47 -27
- package/themes/business/src/components/OrderDetails/Delivery.tsx +134 -53
- package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +156 -46
- package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +45 -18
- package/themes/business/src/components/OrderDetails/styles.tsx +39 -3
- package/themes/business/src/components/OrderDetails/usePrinterCommands.tsx +17 -16
- package/themes/business/src/components/OrderDetailsLogistic/index.tsx +3 -2
- package/themes/business/src/components/OrderSummary/index.tsx +6 -4
- package/themes/business/src/components/OrdersListManager/index.tsx +13 -1
- package/themes/business/src/components/OrdersOption/index.tsx +217 -156
- package/themes/business/src/components/PhoneInputNumber/index.tsx +8 -5
- package/themes/business/src/components/PreviousMessages/index.tsx +26 -3
- package/themes/business/src/components/PreviousOrders/OrderItem.tsx +39 -16
- package/themes/business/src/components/PreviousOrders/index.tsx +74 -66
- package/themes/business/src/components/PrinterEdition/MessageAlert.tsx +33 -0
- package/themes/business/src/components/PrinterEdition/index.tsx +431 -0
- package/themes/business/src/components/PrinterEdition/printerList.tsx +23 -0
- package/themes/business/src/components/PrinterEdition/styles.tsx +61 -0
- package/themes/business/src/components/PrinterSettings/index.tsx +162 -174
- package/themes/business/src/components/PrinterSettings/styles.tsx +14 -1
- package/themes/business/src/components/ProductItemAccordion/index.tsx +3 -2
- package/themes/business/src/components/ReviewCustomer/index.tsx +2 -0
- package/themes/business/src/components/StoresList/index.tsx +2 -2
- package/themes/business/src/components/UserProfileForm/index.tsx +57 -24
- package/themes/business/src/components/UserProfileForm/styles.tsx +7 -0
- package/themes/business/src/components/WebsocketStatus/index.tsx +2 -2
- package/themes/business/src/components/shared/OTextarea.tsx +8 -9
- package/themes/business/src/config/currency.tsx +1010 -0
- package/themes/business/src/hooks/useLocation.tsx +16 -12
- package/themes/business/src/layouts/SafeAreaContainer.tsx +35 -19
- package/themes/business/src/types/index.tsx +18 -5
- package/themes/business/src/utils/index.tsx +33 -3
- package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
- package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
- package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
- package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
- package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
- package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
- package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
- package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
- package/themes/original/index.tsx +11 -0
- package/themes/original/src/components/AddressForm/index.tsx +27 -16
- package/themes/original/src/components/AddressList/index.tsx +8 -7
- package/themes/original/src/components/AppleLogin/index.tsx +4 -4
- package/themes/original/src/components/BusinessBasicInformation/index.tsx +5 -8
- package/themes/original/src/components/BusinessItemAccordion/index.tsx +13 -5
- package/themes/original/src/components/BusinessListingSearch/BusinessSearchFooter.tsx +103 -92
- package/themes/original/src/components/BusinessListingSearch/BusinessSearchHeader.tsx +8 -6
- package/themes/original/src/components/BusinessListingSearch/index.tsx +1 -2
- package/themes/original/src/components/BusinessPreorder/index.tsx +46 -28
- package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +73 -70
- package/themes/original/src/components/BusinessProductsList/index.tsx +6 -7
- package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
- package/themes/original/src/components/BusinessProductsListing/index.tsx +10 -6
- package/themes/original/src/components/BusinessTypeFilter/index.tsx +9 -8
- package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +2 -1
- package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -1
- package/themes/original/src/components/BusinessesListing/index.tsx +0 -1
- package/themes/original/src/components/Cart/index.tsx +46 -14
- package/themes/original/src/components/CartContent/index.tsx +2 -4
- package/themes/original/src/components/Checkout/index.tsx +127 -77
- package/themes/original/src/components/CitiesControl/index.tsx +0 -3
- package/themes/original/src/components/CouponControl/index.tsx +1 -3
- package/themes/original/src/components/DriverTips/index.tsx +1 -3
- package/themes/original/src/components/Favorite/index.tsx +1 -5
- package/themes/original/src/components/FavoriteList/index.tsx +0 -1
- package/themes/original/src/components/ForgotPasswordForm/index.tsx +5 -7
- package/themes/original/src/components/GiftCard/GiftCardUI/index.tsx +15 -17
- package/themes/original/src/components/GiftCard/PurchaseGiftCard/index.tsx +3 -7
- package/themes/original/src/components/GiftCard/RedeemGiftCard/index.tsx +24 -32
- package/themes/original/src/components/GiftCard/SendGiftCard/index.tsx +7 -9
- package/themes/original/src/components/GiftCard/VerticalGiftCardOrdersLayout/index.tsx +11 -12
- package/themes/original/src/components/GoogleMap/index.tsx +39 -18
- package/themes/original/src/components/Help/index.tsx +2 -0
- package/themes/original/src/components/HighestRatedBusinesses/index.tsx +1 -1
- package/themes/original/src/components/Home/index.tsx +2 -11
- package/themes/original/src/components/LoginForm/Otp/index.tsx +0 -3
- package/themes/original/src/components/LoginForm/index.tsx +12 -9
- package/themes/original/src/components/MessageListing/index.tsx +2 -1
- package/themes/original/src/components/Messages/index.tsx +27 -19
- package/themes/original/src/components/MomentOption/TimeListItem.tsx +56 -0
- package/themes/original/src/components/MomentOption/index.tsx +80 -51
- package/themes/original/src/components/MomentSelector/index.tsx +5 -2
- package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +7 -3
- package/themes/original/src/components/MultiCheckout/index.tsx +55 -27
- package/themes/original/src/components/MultiOrdersDetails/index.tsx +1 -0
- package/themes/original/src/components/MyOrders/index.tsx +2 -2
- package/themes/original/src/components/NavBar/index.tsx +7 -4
- package/themes/original/src/components/NetworkError/index.tsx +0 -5
- package/themes/original/src/components/NotFoundSource/index.tsx +0 -3
- package/themes/original/src/components/OrderDetails/OrderEta.tsx +4 -3
- package/themes/original/src/components/OrderDetails/OrderHistory.tsx +16 -11
- package/themes/original/src/components/OrderDetails/index.tsx +44 -21
- package/themes/original/src/components/OrderDetails/styles.tsx +0 -1
- package/themes/original/src/components/OrderProgress/index.tsx +4 -3
- package/themes/original/src/components/OrderSummary/index.tsx +29 -10
- package/themes/original/src/components/OrderTypeSelector/index.tsx +7 -6
- package/themes/original/src/components/OrdersOption/index.tsx +3 -6
- package/themes/original/src/components/PaymentOptionStripe/index.tsx +0 -5
- package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
- package/themes/original/src/components/PaymentOptions/index.tsx +4 -3
- package/themes/original/src/components/PhoneInputNumber/index.tsx +92 -7
- package/themes/original/src/components/PlaceSpot/index.tsx +1 -3
- package/themes/original/src/components/PreviousOrders/index.tsx +1 -2
- package/themes/original/src/components/ProductForm/ActionButton.tsx +17 -20
- package/themes/original/src/components/ProductForm/index.tsx +107 -102
- package/themes/original/src/components/ProductItemAccordion/index.tsx +30 -38
- package/themes/original/src/components/ProductOptionSubOption/index.tsx +16 -8
- package/themes/original/src/components/ProfessionalProfile/index.tsx +4 -5
- package/themes/original/src/components/Promotions/index.tsx +6 -9
- package/themes/original/src/components/ReviewDriver/index.tsx +1 -1
- package/themes/original/src/components/ReviewOrder/index.tsx +2 -2
- package/themes/original/src/components/ReviewProducts/index.tsx +1 -1
- package/themes/original/src/components/ReviewTrigger/index.tsx +2 -2
- package/themes/original/src/components/ServiceForm/index.tsx +52 -54
- package/themes/original/src/components/Sessions/index.tsx +3 -3
- package/themes/original/src/components/SignupForm/index.tsx +102 -88
- package/themes/original/src/components/SingleOrderCard/index.tsx +6 -4
- package/themes/original/src/components/SingleProductCard/index.tsx +5 -5
- package/themes/original/src/components/SingleProductCard/styles.tsx +0 -3
- package/themes/original/src/components/StripeCardForm/index.tsx +0 -3
- package/themes/original/src/components/StripeCardsList/index.tsx +16 -3
- package/themes/original/src/components/StripeElementsForm/index.tsx +76 -62
- package/themes/original/src/components/StripeElementsForm/naked.tsx +48 -1
- package/themes/original/src/components/StripeRedirectForm/index.tsx +0 -3
- package/themes/original/src/components/TaxInformation/index.tsx +3 -2
- package/themes/original/src/components/UpsellingProducts/UpsellingContent.tsx +10 -7
- package/themes/original/src/components/UpsellingProducts/UpsellingLayout.tsx +8 -3
- package/themes/original/src/components/UserDetails/index.tsx +17 -16
- package/themes/original/src/components/UserFormDetails/index.tsx +169 -139
- package/themes/original/src/components/UserProfile/index.tsx +9 -1
- package/themes/original/src/components/UserVerification/index.tsx +15 -4
- package/themes/original/src/components/Wallets/index.tsx +6 -3
- package/themes/original/src/components/WebsocketStatus/index.tsx +1 -4
- package/themes/original/src/components/shared/OAlert.tsx +2 -1
- package/themes/original/src/components/shared/OButton.tsx +5 -4
- package/themes/original/src/components/shared/OInput.tsx +4 -8
- package/themes/original/src/components/shared/OModal.tsx +7 -2
- package/themes/original/src/types/index.tsx +12 -4
- package/themes/original/src/utils/index.tsx +30 -1
- package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
|
@@ -88,6 +88,7 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
88
88
|
const [events] = useEvent()
|
|
89
89
|
const commentRef = useRef()
|
|
90
90
|
const isChewLayout = theme?.header?.components?.layout?.type?.toLowerCase() === 'chew'
|
|
91
|
+
const hideProductDummyLogo = theme?.business_view?.components?.products?.components?.product?.components?.dummy?.hidden
|
|
91
92
|
|
|
92
93
|
const styles = StyleSheet.create({
|
|
93
94
|
mainContainer: {
|
|
@@ -487,114 +488,118 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
487
488
|
</View>
|
|
488
489
|
) : (
|
|
489
490
|
<>
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
}
|
|
507
|
-
nextButton={
|
|
508
|
-
<View style={styles.swiperButton}>
|
|
509
|
-
<IconAntDesign
|
|
510
|
-
name="caretright"
|
|
511
|
-
color={theme.colors.white}
|
|
512
|
-
size={13}
|
|
513
|
-
// style={styles.starIcon}
|
|
514
|
-
/>
|
|
515
|
-
</View>
|
|
516
|
-
}
|
|
517
|
-
>
|
|
518
|
-
{gallery && gallery?.length > 0 && gallery.map((img : any, i: number) => (
|
|
519
|
-
<View
|
|
520
|
-
style={styles.slide1}
|
|
521
|
-
key={i}
|
|
522
|
-
>
|
|
523
|
-
{(String(img).includes('http') || typeof img === 'number') ? (
|
|
524
|
-
<FastImage
|
|
525
|
-
style={{ height: '100%', opacity: isSoldOut ? 0.5 : 1, aspectRatio: 16 / 9 }}
|
|
526
|
-
source={typeof img !== 'number' ? {
|
|
527
|
-
uri: optimizeImage(img, 'h_1024,c_limit'),
|
|
528
|
-
priority: FastImage.priority.normal,
|
|
529
|
-
} : img}
|
|
530
|
-
/>
|
|
531
|
-
) : (
|
|
532
|
-
<>
|
|
533
|
-
<YoutubePlayer
|
|
534
|
-
height={'100%'}
|
|
535
|
-
width={'100%'}
|
|
536
|
-
play={playing}
|
|
537
|
-
videoId={img}
|
|
538
|
-
onChangeState={onStateChange}
|
|
491
|
+
{(product?.images || !hideProductDummyLogo) && (
|
|
492
|
+
<>
|
|
493
|
+
<Swiper
|
|
494
|
+
loop={false}
|
|
495
|
+
ref={swiperRef}
|
|
496
|
+
showsButtons={true}
|
|
497
|
+
style={styles.mainSwiper}
|
|
498
|
+
showsPagination={false}
|
|
499
|
+
onIndexChanged={(index : any) => handleChangeMainIndex(index)}
|
|
500
|
+
prevButton={
|
|
501
|
+
<View style={styles.swiperButton}>
|
|
502
|
+
<IconAntDesign
|
|
503
|
+
name="caretleft"
|
|
504
|
+
color={theme.colors.white}
|
|
505
|
+
size={13}
|
|
506
|
+
// style={styles.starIcon}
|
|
539
507
|
/>
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
paddingHorizontal: 20,
|
|
550
|
-
paddingVertical: 15
|
|
551
|
-
}}
|
|
552
|
-
>
|
|
553
|
-
{gallery?.length > 1 && gallery.map((img: any, index: number) => (
|
|
554
|
-
<TouchableOpacity
|
|
555
|
-
key={index}
|
|
556
|
-
onPress={() => handleClickThumb(index)}
|
|
557
|
-
>
|
|
558
|
-
<View
|
|
559
|
-
style={{
|
|
560
|
-
height: 56,
|
|
561
|
-
borderRadius: 8,
|
|
562
|
-
margin: 8,
|
|
563
|
-
opacity: index === thumbsSwiper ? 1 : 0.8
|
|
564
|
-
}}
|
|
565
|
-
>
|
|
566
|
-
{String(img).includes('http') ? (
|
|
567
|
-
<OIcon
|
|
568
|
-
url={img}
|
|
569
|
-
style={{
|
|
570
|
-
borderColor: theme.colors.lightGray,
|
|
571
|
-
borderRadius: 8,
|
|
572
|
-
minHeight: '100%',
|
|
573
|
-
opacity: isSoldOut ? 0.5 : 1
|
|
574
|
-
}}
|
|
575
|
-
width={56}
|
|
576
|
-
height={56}
|
|
577
|
-
cover
|
|
508
|
+
</View>
|
|
509
|
+
}
|
|
510
|
+
nextButton={
|
|
511
|
+
<View style={styles.swiperButton}>
|
|
512
|
+
<IconAntDesign
|
|
513
|
+
name="caretright"
|
|
514
|
+
color={theme.colors.white}
|
|
515
|
+
size={13}
|
|
516
|
+
// style={styles.starIcon}
|
|
578
517
|
/>
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
518
|
+
</View>
|
|
519
|
+
}
|
|
520
|
+
>
|
|
521
|
+
{gallery && gallery?.length > 0 && gallery.map((img : any, i: number) => (
|
|
522
|
+
<View
|
|
523
|
+
style={styles.slide1}
|
|
524
|
+
key={i}
|
|
525
|
+
>
|
|
526
|
+
{(String(img).includes('http') || typeof img === 'number') ? (
|
|
527
|
+
<FastImage
|
|
528
|
+
style={{ height: '100%', opacity: isSoldOut ? 0.5 : 1, aspectRatio: 16 / 9 }}
|
|
529
|
+
source={typeof img !== 'number' ? {
|
|
530
|
+
uri: optimizeImage(img, 'h_1024,c_limit'),
|
|
531
|
+
priority: FastImage.priority.normal,
|
|
532
|
+
} : img}
|
|
533
|
+
/>
|
|
534
|
+
) : (
|
|
535
|
+
<>
|
|
536
|
+
<YoutubePlayer
|
|
537
|
+
height={'100%'}
|
|
538
|
+
width={'100%'}
|
|
539
|
+
play={playing}
|
|
540
|
+
videoId={img}
|
|
541
|
+
onChangeState={onStateChange}
|
|
542
|
+
/>
|
|
543
|
+
<Button title={playing ? "pause" : "play"} onPress={togglePlaying} />
|
|
544
|
+
</>
|
|
545
|
+
)}
|
|
546
|
+
</View>
|
|
547
|
+
))}
|
|
548
|
+
</Swiper>
|
|
549
|
+
<ScrollView
|
|
550
|
+
horizontal
|
|
551
|
+
contentContainerStyle={{
|
|
552
|
+
paddingHorizontal: 20,
|
|
553
|
+
paddingVertical: 15
|
|
554
|
+
}}
|
|
555
|
+
>
|
|
556
|
+
{gallery?.length > 1 && gallery.map((img: any, index: number) => (
|
|
557
|
+
<TouchableOpacity
|
|
558
|
+
key={index}
|
|
559
|
+
onPress={() => handleClickThumb(index)}
|
|
560
|
+
>
|
|
561
|
+
<View
|
|
582
562
|
style={{
|
|
583
|
-
|
|
563
|
+
height: 56,
|
|
584
564
|
borderRadius: 8,
|
|
585
|
-
|
|
586
|
-
opacity:
|
|
565
|
+
margin: 8,
|
|
566
|
+
opacity: index === thumbsSwiper ? 1 : 0.8
|
|
587
567
|
}}
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
568
|
+
>
|
|
569
|
+
{String(img).includes('http') ? (
|
|
570
|
+
<OIcon
|
|
571
|
+
url={img}
|
|
572
|
+
style={{
|
|
573
|
+
borderColor: theme.colors.lightGray,
|
|
574
|
+
borderRadius: 8,
|
|
575
|
+
minHeight: '100%',
|
|
576
|
+
opacity: isSoldOut ? 0.5 : 1
|
|
577
|
+
}}
|
|
578
|
+
width={56}
|
|
579
|
+
height={56}
|
|
580
|
+
cover
|
|
581
|
+
/>
|
|
582
|
+
) : (
|
|
583
|
+
<OIcon
|
|
584
|
+
url={'https://img.youtube.com/vi/' + img + '/0.jpg'}
|
|
585
|
+
style={{
|
|
586
|
+
borderColor: theme.colors.lightGray,
|
|
587
|
+
borderRadius: 8,
|
|
588
|
+
minHeight: '100%',
|
|
589
|
+
opacity: isSoldOut ? 0.5 : 1
|
|
590
|
+
}}
|
|
591
|
+
width={56}
|
|
592
|
+
height={56}
|
|
593
|
+
cover
|
|
594
|
+
/>
|
|
595
|
+
)}
|
|
596
|
+
</View>
|
|
597
|
+
</TouchableOpacity>
|
|
595
598
|
|
|
596
|
-
|
|
597
|
-
|
|
599
|
+
))}
|
|
600
|
+
</ScrollView>
|
|
601
|
+
</>
|
|
602
|
+
)}
|
|
598
603
|
</>
|
|
599
604
|
)}
|
|
600
605
|
</WrapHeader>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React, { useEffect, useState } from 'react'
|
|
2
2
|
import { View, Animated, StyleSheet, TouchableOpacity } from 'react-native'
|
|
3
|
-
import { useUtils, useLanguage, useOrder } from 'ordering-components/native'
|
|
3
|
+
import { useUtils, useLanguage, useOrder, ProductItemAccordion as ProductItemAccordionController } from 'ordering-components/native'
|
|
4
4
|
import { useTheme } from 'styled-components/native';
|
|
5
5
|
import MaterialCommunityIcon from 'react-native-vector-icons/MaterialCommunityIcons'
|
|
6
6
|
import RNPickerSelect from 'react-native-picker-select'
|
|
@@ -24,7 +24,7 @@ import { OIcon, OText, OAlert, OModal } from '../shared'
|
|
|
24
24
|
|
|
25
25
|
import { ProductItemAccordionParams } from '../../types'
|
|
26
26
|
|
|
27
|
-
export const
|
|
27
|
+
export const ProductItemAccordionUI = (props: ProductItemAccordionParams) => {
|
|
28
28
|
|
|
29
29
|
const {
|
|
30
30
|
isDisabledEdit,
|
|
@@ -36,6 +36,7 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
|
|
|
36
36
|
onDeleteProduct,
|
|
37
37
|
onEditProduct,
|
|
38
38
|
isFromCheckout,
|
|
39
|
+
productInfo
|
|
39
40
|
} = props
|
|
40
41
|
|
|
41
42
|
const theme = useTheme();
|
|
@@ -43,8 +44,17 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
|
|
|
43
44
|
? theme?.checkout?.components?.cart?.components?.product?.components?.image?.hidden
|
|
44
45
|
: theme?.confirmation?.components?.cart?.components?.products?.components?.photo?.hidden
|
|
45
46
|
|
|
47
|
+
const hideProductDummyLogo = theme?.business_view?.components?.products?.components?.product?.components?.dummy?.hidden
|
|
46
48
|
const hideProductCommentHide = isFromCheckout && theme?.checkout?.components?.cart?.components?.product?.components?.comments?.hidden
|
|
47
49
|
|
|
50
|
+
const styles = StyleSheet.create({
|
|
51
|
+
productImage: {
|
|
52
|
+
borderRadius: 7.6,
|
|
53
|
+
width: 48,
|
|
54
|
+
height: 48
|
|
55
|
+
}
|
|
56
|
+
})
|
|
57
|
+
|
|
48
58
|
const pickerStyle = StyleSheet.create({
|
|
49
59
|
inputAndroid: {
|
|
50
60
|
width: 45,
|
|
@@ -90,24 +100,6 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
|
|
|
90
100
|
const [isServiceOpen, setIsServiceOpen] = useState(false)
|
|
91
101
|
const [productQuantityState, setProductQuantityState] = useState<any>(product.quantity.toString())
|
|
92
102
|
|
|
93
|
-
const productInfo = () => {
|
|
94
|
-
if (isCartProduct) {
|
|
95
|
-
const ingredients = JSON.parse(JSON.stringify(Object.values(product.ingredients ?? {})))
|
|
96
|
-
let options = JSON.parse(JSON.stringify(Object.values(product.options ?? {})))
|
|
97
|
-
|
|
98
|
-
options = options.map((option: any) => {
|
|
99
|
-
option.suboptions = Object.values(option.suboptions ?? {})
|
|
100
|
-
return option
|
|
101
|
-
})
|
|
102
|
-
return {
|
|
103
|
-
...productInfo,
|
|
104
|
-
ingredients,
|
|
105
|
-
options
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
return product
|
|
109
|
-
}
|
|
110
|
-
|
|
111
103
|
const handleEditProduct = (curProduct: any) => {
|
|
112
104
|
if (!curProduct?.calendar_event) {
|
|
113
105
|
onEditProduct && onEditProduct(curProduct)
|
|
@@ -153,13 +145,13 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
|
|
|
153
145
|
isValid={product?.valid ?? true}
|
|
154
146
|
onPress={
|
|
155
147
|
(!product?.valid_menu && isCartProduct) ||
|
|
156
|
-
|
|
157
|
-
|
|
148
|
+
!(productInfo.ingredients.length > 0 || productInfo.options.length > 0 || !!product.comment)
|
|
149
|
+
? null : () => setActiveState(!isActive)
|
|
158
150
|
}
|
|
159
151
|
>
|
|
160
152
|
<View style={{ flexDirection: 'row', alignItems: 'flex-start' }}>
|
|
161
153
|
<ContentInfo>
|
|
162
|
-
{(product?.images || theme?.images?.dummies?.product) && !hideProductImage && (
|
|
154
|
+
{(product?.images || (!hideProductDummyLogo && theme?.images?.dummies?.product)) && !hideProductImage && (
|
|
163
155
|
<ProductImage>
|
|
164
156
|
{isFromCheckout ? (
|
|
165
157
|
product?.images ? (
|
|
@@ -245,7 +237,7 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
|
|
|
245
237
|
<View style={{ display: 'flex', flexDirection: 'column', flex: 1, alignItems: 'flex-end', maxWidth: 100 }}>
|
|
246
238
|
<View style={{ flexDirection: 'row' }}>
|
|
247
239
|
<OText size={12} lineHeight={18} weight={'400'}>{parsePrice(product.total || product.price)}</OText>
|
|
248
|
-
{(productInfo
|
|
240
|
+
{(productInfo.ingredients.length > 0 || productInfo.options.length > 0 || !!product.comment) && (
|
|
249
241
|
<MaterialCommunityIcon name='chevron-down' size={18} />
|
|
250
242
|
)}
|
|
251
243
|
</View>
|
|
@@ -289,20 +281,20 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
|
|
|
289
281
|
<View style={{ display: isActive ? 'flex' : 'none', paddingStart: isFromCheckout ? 100 : 40, marginTop: isFromCheckout ? -80 : -30 }}>
|
|
290
282
|
<Animated.View>
|
|
291
283
|
<AccordionContent>
|
|
292
|
-
{productInfo
|
|
284
|
+
{productInfo.ingredients.length > 0 && productInfo.ingredients.some((ingredient: any) => !ingredient.selected) && (
|
|
293
285
|
<ProductOptionsList>
|
|
294
286
|
<OText size={10} color={theme.colors.textSecondary}>{t('INGREDIENTS', 'Ingredients')}</OText>
|
|
295
|
-
{productInfo
|
|
287
|
+
{productInfo.ingredients.map((ingredient: any, i) => !ingredient.selected && (
|
|
296
288
|
<OText size={10} color={theme.colors.textThird} key={ingredient.id + i} style={{ marginLeft: 10 }}>{t('NO', 'No')} {ingredient.name}</OText>
|
|
297
289
|
))}
|
|
298
290
|
</ProductOptionsList>
|
|
299
291
|
)}
|
|
300
|
-
{productInfo
|
|
292
|
+
{productInfo.options.length > 0 && (
|
|
301
293
|
<ProductOptionsList>
|
|
302
|
-
{productInfo
|
|
294
|
+
{productInfo.options.map((option: any) => (
|
|
303
295
|
<ProductOption key={option.id}>
|
|
304
296
|
<OText size={10} color={theme.colors.textSecondary}>{option.name}</OText>
|
|
305
|
-
{option.suboptions.map((suboption: any) => (
|
|
297
|
+
{option.suboptions.sort((a: any, b: any) => a.rank - b.rank).map((suboption: any) => (
|
|
306
298
|
<ProductSubOption key={suboption.id}>
|
|
307
299
|
<OText size={10} color={theme.colors.textThird}>
|
|
308
300
|
{getFormattedSubOptionName({
|
|
@@ -349,13 +341,13 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
|
|
|
349
341
|
)
|
|
350
342
|
}
|
|
351
343
|
|
|
352
|
-
const
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
height: 48
|
|
357
|
-
},
|
|
358
|
-
test: {
|
|
359
|
-
overflow: 'hidden',
|
|
344
|
+
export const ProductItemAccordion = (props: any) => {
|
|
345
|
+
const productItemAccordionProps = {
|
|
346
|
+
...props,
|
|
347
|
+
UIComponent: ProductItemAccordionUI
|
|
360
348
|
}
|
|
361
|
-
|
|
349
|
+
|
|
350
|
+
return (
|
|
351
|
+
<ProductItemAccordionController {...productItemAccordionProps} />
|
|
352
|
+
)
|
|
353
|
+
}
|
|
@@ -35,10 +35,17 @@ export const ProductOptionSubOptionUI = (props: any) => {
|
|
|
35
35
|
disabled,
|
|
36
36
|
setIsScrollAvailable,
|
|
37
37
|
image,
|
|
38
|
-
enableIntersection
|
|
38
|
+
enableIntersection,
|
|
39
|
+
usePizzaValidation,
|
|
40
|
+
pizzaState
|
|
39
41
|
} = props
|
|
40
42
|
|
|
41
|
-
const disableIncrement =
|
|
43
|
+
const disableIncrement =
|
|
44
|
+
option?.with_half_option
|
|
45
|
+
? pizzaState?.[`option:${option?.id}`]?.value === option?.max
|
|
46
|
+
: option?.limit_suboptions_by_max
|
|
47
|
+
? (balance === option?.max || state.quantity === suboption.max)
|
|
48
|
+
: state.quantity === suboption?.max || (!state.selected && balance === option?.max)
|
|
42
49
|
const price = option?.with_half_option && suboption?.half_price && state.position !== 'whole' ? suboption?.half_price : suboption?.price
|
|
43
50
|
|
|
44
51
|
const theme = useTheme();
|
|
@@ -65,8 +72,9 @@ export const ProductOptionSubOptionUI = (props: any) => {
|
|
|
65
72
|
const handleSuboptionClick = () => {
|
|
66
73
|
toggleSelect()
|
|
67
74
|
setIsDirty(true)
|
|
75
|
+
const minMaxValidation = option?.with_half_option ? usePizzaValidation : (balance === option?.max && option?.suboptions?.length > balance && !(option?.min === 1 && option?.max === 1))
|
|
68
76
|
|
|
69
|
-
if (
|
|
77
|
+
if (!state.selected && minMaxValidation) {
|
|
70
78
|
setShowMessage(true)
|
|
71
79
|
}
|
|
72
80
|
}
|
|
@@ -86,7 +94,7 @@ export const ProductOptionSubOptionUI = (props: any) => {
|
|
|
86
94
|
if (!(balance === option?.max && option?.suboptions?.length > balance && !(option?.min === 1 && option?.max === 1))) {
|
|
87
95
|
setShowMessage(false)
|
|
88
96
|
}
|
|
89
|
-
}, [balance])
|
|
97
|
+
}, [balance, pizzaState?.[`option:${option?.id}`]?.value])
|
|
90
98
|
|
|
91
99
|
return (
|
|
92
100
|
<InView onChange={(inView: boolean) => handleChangeInterSection(inView)} triggerOnce={true}>
|
|
@@ -122,7 +130,7 @@ export const ProductOptionSubOptionUI = (props: any) => {
|
|
|
122
130
|
{suboption?.name}
|
|
123
131
|
</OText>
|
|
124
132
|
</IconControl>
|
|
125
|
-
{option?.allow_suboption_quantity && state?.selected && (
|
|
133
|
+
{!(option?.max === 1 && option?.min === 1) && option?.allow_suboption_quantity && state?.selected && (
|
|
126
134
|
<QuantityControl>
|
|
127
135
|
<>
|
|
128
136
|
<Checkbox disabled={disabled || state.quantity === 0} onPress={decrement}>
|
|
@@ -135,11 +143,11 @@ export const ProductOptionSubOptionUI = (props: any) => {
|
|
|
135
143
|
<OText size={12}>
|
|
136
144
|
{state.quantity}
|
|
137
145
|
</OText>
|
|
138
|
-
<Checkbox disabled={disabled || disableIncrement} onPress={increment}>
|
|
146
|
+
<Checkbox disabled={disabled || disableIncrement || usePizzaValidation} onPress={increment}>
|
|
139
147
|
<IconAntDesign
|
|
140
148
|
name='pluscircleo'
|
|
141
149
|
size={iconsSize}
|
|
142
|
-
color={disableIncrement || disabled ? theme.colors.disabled : theme.colors.primary}
|
|
150
|
+
color={disableIncrement || disabled || usePizzaValidation ? theme.colors.disabled : theme.colors.primary}
|
|
143
151
|
/>
|
|
144
152
|
</Checkbox>
|
|
145
153
|
</>
|
|
@@ -157,7 +165,7 @@ export const ProductOptionSubOptionUI = (props: any) => {
|
|
|
157
165
|
style={styles.inverse}
|
|
158
166
|
/>
|
|
159
167
|
</Circle>
|
|
160
|
-
<Circle disabled={disabled} onPress={() => changePosition('whole')}>
|
|
168
|
+
<Circle disabled={disabled || (pizzaState?.[`option:${option?.id}`]?.value === option?.max)} onPress={() => changePosition('whole')}>
|
|
161
169
|
<OIcon
|
|
162
170
|
src={theme.images.general.half_f}
|
|
163
171
|
color={state.selected && state.position === 'whole' ? theme.colors.primary : '#cbcbcb'}
|
|
@@ -233,7 +233,7 @@ export const ProfessionalProfile = (props: ProfessionalProfileParams) => {
|
|
|
233
233
|
<CalendarWrapper>
|
|
234
234
|
{(timeList?.length > 0 && isEnabled) ? (
|
|
235
235
|
<SelectDropdown
|
|
236
|
-
ref={dropdownRef}
|
|
236
|
+
ref={dropdownRef}
|
|
237
237
|
data={timeList}
|
|
238
238
|
onSelect={(selectedItem, index) => {
|
|
239
239
|
console.log(selectedItem.value)
|
|
@@ -244,7 +244,7 @@ export const ProfessionalProfile = (props: ProfessionalProfileParams) => {
|
|
|
244
244
|
rowTextForSelection={(item, index) => {
|
|
245
245
|
return item.text
|
|
246
246
|
}}
|
|
247
|
-
buttonStyle={{borderRadius: 7.6, ...styles.selectOption}}
|
|
247
|
+
buttonStyle={{ borderRadius: 7.6, ...styles.selectOption }}
|
|
248
248
|
buttonTextStyle={{
|
|
249
249
|
color: theme.colors.disabled,
|
|
250
250
|
fontSize: 14,
|
|
@@ -267,7 +267,7 @@ export const ProfessionalProfile = (props: ProfessionalProfileParams) => {
|
|
|
267
267
|
}}
|
|
268
268
|
renderCustomizedRowChild={(item, index) => {
|
|
269
269
|
return (
|
|
270
|
-
<Text style={[styles.dropDownRow, { color: isBusyTime(professional, getMomentTime(item.value)) ? theme.colors.lightGray : theme.colors.primary }
|
|
270
|
+
<Text style={[styles.dropDownRow, { color: isBusyTime(professional, getMomentTime(item.value)) ? theme.colors.lightGray : theme.colors.primary }]}>
|
|
271
271
|
{item.text}
|
|
272
272
|
</Text>
|
|
273
273
|
)
|
|
@@ -326,11 +326,10 @@ export const ProfessionalProfile = (props: ProfessionalProfileParams) => {
|
|
|
326
326
|
</ScheduleWrapper>
|
|
327
327
|
<ButtonWrapper>
|
|
328
328
|
<OButton
|
|
329
|
-
bgColor={theme.colors.primary}
|
|
330
329
|
onClick={() => handleSelectProfessional()}
|
|
331
330
|
text={t('BOOK', 'Book')}
|
|
332
331
|
style={styles.buttonStyle}
|
|
333
|
-
textStyle={{ fontSize: 14
|
|
332
|
+
textStyle={{ fontSize: 14 }}
|
|
334
333
|
/>
|
|
335
334
|
</ButtonWrapper>
|
|
336
335
|
</Container>
|
|
@@ -171,7 +171,7 @@ const PromotionsUI = (props: PromotionParams) => {
|
|
|
171
171
|
onClick={() => handleClickOffer(offer)}
|
|
172
172
|
text={t('VIEW', 'View')}
|
|
173
173
|
style={styles.buttonStyle}
|
|
174
|
-
textStyle={{ fontSize: 14,
|
|
174
|
+
textStyle={{ fontSize: 14, flexWrap: 'nowrap' }}
|
|
175
175
|
/>
|
|
176
176
|
</WrapperSingleOffer>
|
|
177
177
|
))}
|
|
@@ -182,7 +182,7 @@ const PromotionsUI = (props: PromotionParams) => {
|
|
|
182
182
|
title={``}
|
|
183
183
|
onClose={() => setOpenModal(false)}
|
|
184
184
|
>
|
|
185
|
-
<
|
|
185
|
+
<ScrollView style={{ padding: 20 }}>
|
|
186
186
|
<OText style={{ alignSelf: 'center', fontWeight: '700' }} mBottom={20}>
|
|
187
187
|
{offerSelected?.name} / {t('VALUE_OF_OFFER', 'Value of offer')}: {offerSelected?.rate_type === 1 ? `${offerSelected?.rate}%` : `${parsePrice(offerSelected?.rate)}`}
|
|
188
188
|
</OText>
|
|
@@ -210,10 +210,7 @@ const PromotionsUI = (props: PromotionParams) => {
|
|
|
210
210
|
<OText style={{ marginTop: 10, marginBottom: 10 }}>
|
|
211
211
|
{t('AVAILABLE_BUSINESSES_FOR_OFFER', 'Available businesses for this offer')}:
|
|
212
212
|
</OText>
|
|
213
|
-
<
|
|
214
|
-
showsVerticalScrollIndicator={false}
|
|
215
|
-
style={{ height: '68%' }}
|
|
216
|
-
>
|
|
213
|
+
<View style={{ marginBottom: 70 }}>
|
|
217
214
|
{offerSelected?.businesses?.map((business: any) => {
|
|
218
215
|
return (
|
|
219
216
|
<SingleBusinessOffer key={business.id}>
|
|
@@ -238,14 +235,14 @@ const PromotionsUI = (props: PromotionParams) => {
|
|
|
238
235
|
onClick={() => handleBusinessClick(business)}
|
|
239
236
|
text={t('GO_TO_BUSINESSS', 'Go to business')}
|
|
240
237
|
style={styles.modalButtonStyle}
|
|
241
|
-
textStyle={{ fontSize: 10
|
|
238
|
+
textStyle={{ fontSize: 10 }}
|
|
242
239
|
/>
|
|
243
240
|
</BusinessInfo>
|
|
244
241
|
</SingleBusinessOffer>
|
|
245
242
|
)
|
|
246
243
|
})}
|
|
247
|
-
</
|
|
248
|
-
</
|
|
244
|
+
</View>
|
|
245
|
+
</ScrollView>
|
|
249
246
|
</OModal>
|
|
250
247
|
</PromotionsContainer>
|
|
251
248
|
</Container>
|
|
@@ -293,7 +293,7 @@ const ReviewDriverUI = (props: ReviewDriverParams) => {
|
|
|
293
293
|
<FloatingBottomContainer>
|
|
294
294
|
<ActionContainer>
|
|
295
295
|
<OButton
|
|
296
|
-
textStyle={{
|
|
296
|
+
textStyle={{ paddingRight: 10 }}
|
|
297
297
|
text={t('SEND_REVIEW', 'Send Review')}
|
|
298
298
|
style={{ borderRadius: 8 }}
|
|
299
299
|
imgRightStyle={{ tintColor: theme.colors.white, right: 5, margin: 5 }}
|
|
@@ -227,7 +227,7 @@ export const ReviewOrderUI = (props: ReviewOrderParams) => {
|
|
|
227
227
|
</View>
|
|
228
228
|
) : (
|
|
229
229
|
<MultiLogosContainer>
|
|
230
|
-
{order?.logo?.map((logo
|
|
230
|
+
{order?.logo?.map((logo: string, i: number) => (
|
|
231
231
|
<React.Fragment key={logo}>
|
|
232
232
|
<View style={styles.logoWrapper}>
|
|
233
233
|
<OIcon
|
|
@@ -333,7 +333,7 @@ export const ReviewOrderUI = (props: ReviewOrderParams) => {
|
|
|
333
333
|
<OText weight={700} size={18} color={theme.colors.textNormal}>{t('FRONT_VISUALS_SKIP', 'Skip')}</OText>
|
|
334
334
|
</SkipButton>
|
|
335
335
|
<OButton
|
|
336
|
-
textStyle={{
|
|
336
|
+
textStyle={{ paddingRight: 10 }}
|
|
337
337
|
text={t('CONTINUE', 'Continue')}
|
|
338
338
|
style={{ borderRadius: 8 }}
|
|
339
339
|
imgRightSrc={theme.images.general.arrow_right}
|
|
@@ -104,7 +104,7 @@ const ReviewProductsUI = (props: ReviewProductParams) => {
|
|
|
104
104
|
<OText weight={700} size={18} color={theme.colors.textNormal}>{t('FRONT_VISUALS_SKIP', 'Skip')}</OText>
|
|
105
105
|
</SkipButton>
|
|
106
106
|
<OButton
|
|
107
|
-
textStyle={{
|
|
107
|
+
textStyle={{ paddingRight: 10 }}
|
|
108
108
|
text={order?.driver && !order?.user_review ? t('CONTINUE', 'Continue') : t('SEND_REVIEW', 'Send Review')}
|
|
109
109
|
style={{ borderRadius: 8 }}
|
|
110
110
|
imgRightSrc={theme.images.general.arrow_right}
|
|
@@ -90,7 +90,7 @@ export const ReviewTrigger = (props: any) => {
|
|
|
90
90
|
</View>
|
|
91
91
|
) : (
|
|
92
92
|
<MultiLogosContainer>
|
|
93
|
-
{order?.logo?.map((logo
|
|
93
|
+
{order?.logo?.map((logo: string, i: number) => (
|
|
94
94
|
<React.Fragment key={logo}>
|
|
95
95
|
<View style={styles.logoWrapper}>
|
|
96
96
|
<OIcon
|
|
@@ -122,7 +122,7 @@ export const ReviewTrigger = (props: any) => {
|
|
|
122
122
|
<FloatingBottomContainer borderTopWidth={0} borderRadius={10}>
|
|
123
123
|
<ActionContainer>
|
|
124
124
|
<OButton
|
|
125
|
-
textStyle={{
|
|
125
|
+
textStyle={{ paddingRight: 10 }}
|
|
126
126
|
text={t('GOTO_REVIEW', 'Go to review')}
|
|
127
127
|
style={{ borderRadius: 8 }}
|
|
128
128
|
imgRightSrc={theme.images.general.arrow_right}
|