ordering-ui-react-native 0.22.21 → 0.22.22-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.
Files changed (164) hide show
  1. package/package.json +6 -7
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/BusinessesListing/index.tsx +1 -1
  4. package/src/components/Checkout/index.tsx +40 -39
  5. package/src/components/StripeMethodForm/index.tsx +4 -2
  6. package/src/components/VerifyPhone/styles.tsx +1 -2
  7. package/src/context/OfflineActions/index.tsx +236 -0
  8. package/src/types/index.tsx +2 -1
  9. package/themes/business/index.tsx +2 -0
  10. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +9 -6
  11. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +1 -0
  12. package/themes/business/src/components/BusinessController/index.tsx +8 -3
  13. package/themes/business/src/components/BusinessProductList/index.tsx +3 -2
  14. package/themes/business/src/components/Chat/index.tsx +15 -3
  15. package/themes/business/src/components/DriverMap/index.tsx +49 -26
  16. package/themes/business/src/components/FloatingButton/index.tsx +3 -2
  17. package/themes/business/src/components/GoogleMap/index.tsx +15 -8
  18. package/themes/business/src/components/LanguageSelector/index.tsx +2 -3
  19. package/themes/business/src/components/LanguageSelector/lang_country.json +515 -70
  20. package/themes/business/src/components/LogoutButton/index.tsx +1 -1
  21. package/themes/business/src/components/MapView/index.tsx +36 -17
  22. package/themes/business/src/components/NewOrderNotification/index.tsx +38 -19
  23. package/themes/business/src/components/OrderDetails/Business.tsx +47 -27
  24. package/themes/business/src/components/OrderDetails/Delivery.tsx +134 -53
  25. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +128 -41
  26. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +45 -18
  27. package/themes/business/src/components/OrderDetails/styles.tsx +39 -3
  28. package/themes/business/src/components/OrderDetails/usePrinterCommands.tsx +17 -16
  29. package/themes/business/src/components/OrderDetailsLogistic/index.tsx +3 -2
  30. package/themes/business/src/components/OrderSummary/index.tsx +6 -4
  31. package/themes/business/src/components/OrdersListManager/index.tsx +13 -1
  32. package/themes/business/src/components/OrdersOption/index.tsx +217 -156
  33. package/themes/business/src/components/PhoneInputNumber/index.tsx +8 -5
  34. package/themes/business/src/components/PreviousMessages/index.tsx +26 -3
  35. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +39 -16
  36. package/themes/business/src/components/PreviousOrders/index.tsx +74 -66
  37. package/themes/business/src/components/PrinterEdition/MessageAlert.tsx +33 -0
  38. package/themes/business/src/components/PrinterEdition/index.tsx +431 -0
  39. package/themes/business/src/components/PrinterEdition/printerList.tsx +23 -0
  40. package/themes/business/src/components/PrinterEdition/styles.tsx +61 -0
  41. package/themes/business/src/components/PrinterSettings/index.tsx +162 -174
  42. package/themes/business/src/components/PrinterSettings/styles.tsx +14 -1
  43. package/themes/business/src/components/ProductItemAccordion/index.tsx +3 -2
  44. package/themes/business/src/components/ReviewCustomer/index.tsx +2 -0
  45. package/themes/business/src/components/StoresList/index.tsx +2 -2
  46. package/themes/business/src/components/UserProfileForm/index.tsx +55 -22
  47. package/themes/business/src/components/UserProfileForm/styles.tsx +7 -0
  48. package/themes/business/src/components/WebsocketStatus/index.tsx +2 -2
  49. package/themes/business/src/components/shared/OTextarea.tsx +8 -9
  50. package/themes/business/src/config/currency.tsx +1010 -0
  51. package/themes/business/src/hooks/useLocation.tsx +16 -12
  52. package/themes/business/src/layouts/SafeAreaContainer.tsx +35 -19
  53. package/themes/business/src/types/index.tsx +16 -4
  54. package/themes/business/src/utils/index.tsx +33 -3
  55. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  56. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  57. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  58. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  59. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  60. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  61. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  62. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  63. package/themes/original/index.tsx +11 -0
  64. package/themes/original/src/components/AddressForm/index.tsx +32 -17
  65. package/themes/original/src/components/AddressList/index.tsx +8 -7
  66. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  67. package/themes/original/src/components/BusinessBasicInformation/index.tsx +5 -8
  68. package/themes/original/src/components/BusinessItemAccordion/index.tsx +13 -5
  69. package/themes/original/src/components/BusinessListingSearch/BusinessSearchFooter.tsx +103 -92
  70. package/themes/original/src/components/BusinessListingSearch/BusinessSearchHeader.tsx +8 -6
  71. package/themes/original/src/components/BusinessListingSearch/index.tsx +1 -2
  72. package/themes/original/src/components/BusinessPreorder/index.tsx +46 -28
  73. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +73 -70
  74. package/themes/original/src/components/BusinessProductsList/index.tsx +6 -7
  75. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  76. package/themes/original/src/components/BusinessProductsListing/index.tsx +10 -6
  77. package/themes/original/src/components/BusinessTypeFilter/index.tsx +9 -8
  78. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +2 -1
  79. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -1
  80. package/themes/original/src/components/BusinessesListing/index.tsx +0 -1
  81. package/themes/original/src/components/Cart/index.tsx +46 -14
  82. package/themes/original/src/components/CartContent/index.tsx +2 -4
  83. package/themes/original/src/components/Checkout/index.tsx +127 -77
  84. package/themes/original/src/components/CitiesControl/index.tsx +0 -3
  85. package/themes/original/src/components/CouponControl/index.tsx +1 -3
  86. package/themes/original/src/components/DriverTips/index.tsx +1 -3
  87. package/themes/original/src/components/Favorite/index.tsx +1 -5
  88. package/themes/original/src/components/FavoriteList/index.tsx +0 -1
  89. package/themes/original/src/components/ForgotPasswordForm/index.tsx +5 -7
  90. package/themes/original/src/components/GiftCard/GiftCardUI/index.tsx +15 -17
  91. package/themes/original/src/components/GiftCard/PurchaseGiftCard/index.tsx +3 -7
  92. package/themes/original/src/components/GiftCard/RedeemGiftCard/index.tsx +24 -32
  93. package/themes/original/src/components/GiftCard/SendGiftCard/index.tsx +7 -9
  94. package/themes/original/src/components/GiftCard/VerticalGiftCardOrdersLayout/index.tsx +11 -12
  95. package/themes/original/src/components/GoogleMap/index.tsx +39 -18
  96. package/themes/original/src/components/Help/index.tsx +2 -0
  97. package/themes/original/src/components/HighestRatedBusinesses/index.tsx +1 -1
  98. package/themes/original/src/components/Home/index.tsx +3 -11
  99. package/themes/original/src/components/LoginForm/Otp/index.tsx +0 -3
  100. package/themes/original/src/components/LoginForm/index.tsx +12 -9
  101. package/themes/original/src/components/MessageListing/index.tsx +2 -1
  102. package/themes/original/src/components/Messages/index.tsx +27 -19
  103. package/themes/original/src/components/MomentOption/TimeListItem.tsx +56 -0
  104. package/themes/original/src/components/MomentOption/index.tsx +80 -51
  105. package/themes/original/src/components/MomentSelector/index.tsx +5 -2
  106. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +7 -3
  107. package/themes/original/src/components/MultiCheckout/index.tsx +55 -27
  108. package/themes/original/src/components/MultiOrdersDetails/index.tsx +1 -0
  109. package/themes/original/src/components/MyOrders/index.tsx +2 -2
  110. package/themes/original/src/components/NavBar/index.tsx +7 -4
  111. package/themes/original/src/components/NetworkError/index.tsx +0 -5
  112. package/themes/original/src/components/NotFoundSource/index.tsx +0 -3
  113. package/themes/original/src/components/OrderDetails/OrderEta.tsx +4 -3
  114. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +16 -11
  115. package/themes/original/src/components/OrderDetails/index.tsx +44 -21
  116. package/themes/original/src/components/OrderDetails/styles.tsx +0 -1
  117. package/themes/original/src/components/OrderProgress/index.tsx +4 -3
  118. package/themes/original/src/components/OrderSummary/index.tsx +29 -10
  119. package/themes/original/src/components/OrderTypeSelector/index.tsx +7 -6
  120. package/themes/original/src/components/OrdersOption/index.tsx +3 -6
  121. package/themes/original/src/components/PaymentOptionStripe/index.tsx +0 -5
  122. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  123. package/themes/original/src/components/PaymentOptions/index.tsx +4 -3
  124. package/themes/original/src/components/PhoneInputNumber/index.tsx +92 -7
  125. package/themes/original/src/components/PlaceSpot/index.tsx +1 -3
  126. package/themes/original/src/components/PreviousOrders/index.tsx +1 -2
  127. package/themes/original/src/components/ProductForm/ActionButton.tsx +17 -20
  128. package/themes/original/src/components/ProductForm/index.tsx +107 -102
  129. package/themes/original/src/components/ProductItemAccordion/index.tsx +50 -43
  130. package/themes/original/src/components/ProductItemAccordion/styles.tsx +0 -3
  131. package/themes/original/src/components/ProductOptionSubOption/index.tsx +16 -8
  132. package/themes/original/src/components/ProfessionalProfile/index.tsx +4 -5
  133. package/themes/original/src/components/Promotions/index.tsx +6 -9
  134. package/themes/original/src/components/ReviewDriver/index.tsx +1 -1
  135. package/themes/original/src/components/ReviewOrder/index.tsx +2 -2
  136. package/themes/original/src/components/ReviewProducts/index.tsx +1 -1
  137. package/themes/original/src/components/ReviewTrigger/index.tsx +2 -2
  138. package/themes/original/src/components/ServiceForm/index.tsx +52 -54
  139. package/themes/original/src/components/Sessions/index.tsx +3 -3
  140. package/themes/original/src/components/SignupForm/index.tsx +102 -88
  141. package/themes/original/src/components/SingleOrderCard/index.tsx +6 -4
  142. package/themes/original/src/components/SingleProductCard/index.tsx +5 -5
  143. package/themes/original/src/components/SingleProductCard/styles.tsx +0 -3
  144. package/themes/original/src/components/StripeCardForm/index.tsx +0 -3
  145. package/themes/original/src/components/StripeCardsList/index.tsx +16 -3
  146. package/themes/original/src/components/StripeElementsForm/index.tsx +76 -62
  147. package/themes/original/src/components/StripeElementsForm/naked.tsx +48 -1
  148. package/themes/original/src/components/StripeRedirectForm/index.tsx +0 -3
  149. package/themes/original/src/components/TaxInformation/index.tsx +3 -2
  150. package/themes/original/src/components/UpsellingProducts/UpsellingContent.tsx +10 -7
  151. package/themes/original/src/components/UpsellingProducts/UpsellingLayout.tsx +8 -3
  152. package/themes/original/src/components/UserDetails/index.tsx +17 -16
  153. package/themes/original/src/components/UserFormDetails/index.tsx +164 -135
  154. package/themes/original/src/components/UserProfile/index.tsx +9 -1
  155. package/themes/original/src/components/UserVerification/index.tsx +15 -4
  156. package/themes/original/src/components/Wallets/index.tsx +6 -3
  157. package/themes/original/src/components/WebsocketStatus/index.tsx +1 -4
  158. package/themes/original/src/components/shared/OAlert.tsx +2 -1
  159. package/themes/original/src/components/shared/OButton.tsx +5 -4
  160. package/themes/original/src/components/shared/OInput.tsx +4 -8
  161. package/themes/original/src/components/shared/OModal.tsx +7 -2
  162. package/themes/original/src/types/index.tsx +10 -3
  163. package/themes/original/src/utils/index.tsx +30 -1
  164. 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
- <Swiper
491
- loop={false}
492
- ref={swiperRef}
493
- showsButtons={true}
494
- style={styles.mainSwiper}
495
- showsPagination={false}
496
- onIndexChanged={(index : any) => handleChangeMainIndex(index)}
497
- prevButton={
498
- <View style={styles.swiperButton}>
499
- <IconAntDesign
500
- name="caretleft"
501
- color={theme.colors.white}
502
- size={13}
503
- // style={styles.starIcon}
504
- />
505
- </View>
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
- <Button title={playing ? "pause" : "play"} onPress={togglePlaying} />
541
- </>
542
- )}
543
- </View>
544
- ))}
545
- </Swiper>
546
- <ScrollView
547
- horizontal
548
- contentContainerStyle={{
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
- <OIcon
581
- url={'https://img.youtube.com/vi/' + img + '/0.jpg'}
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
- borderColor: theme.colors.lightGray,
563
+ height: 56,
584
564
  borderRadius: 8,
585
- minHeight: '100%',
586
- opacity: isSoldOut ? 0.5 : 1
565
+ margin: 8,
566
+ opacity: index === thumbsSwiper ? 1 : 0.8
587
567
  }}
588
- width={56}
589
- height={56}
590
- cover
591
- />
592
- )}
593
- </View>
594
- </TouchableOpacity>
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
- </ScrollView>
599
+ ))}
600
+ </ScrollView>
601
+ </>
602
+ )}
598
603
  </>
599
604
  )}
600
605
  </WrapHeader>
@@ -1,5 +1,5 @@
1
- import React, { useState } from 'react'
2
- import { View, Animated, StyleSheet, Platform, TouchableOpacity } from 'react-native'
1
+ import React, { useEffect, useState } from 'react'
2
+ import { View, Animated, StyleSheet, TouchableOpacity } from 'react-native'
3
3
  import { useUtils, useLanguage, useOrder } from 'ordering-components/native'
4
4
  import { useTheme } from 'styled-components/native';
5
5
  import MaterialCommunityIcon from 'react-native-vector-icons/MaterialCommunityIcons'
@@ -39,28 +39,43 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
39
39
  } = props
40
40
 
41
41
  const theme = useTheme();
42
+ const hideProductImage = isFromCheckout
43
+ ? theme?.checkout?.components?.cart?.components?.product?.components?.image?.hidden
44
+ : theme?.confirmation?.components?.cart?.components?.products?.components?.photo?.hidden
45
+
46
+ const hideProductDummyLogo = theme?.business_view?.components?.products?.components?.product?.components?.dummy?.hidden
47
+ const hideProductCommentHide = isFromCheckout && theme?.checkout?.components?.cart?.components?.product?.components?.comments?.hidden
42
48
 
43
49
  const pickerStyle = StyleSheet.create({
44
50
  inputAndroid: {
45
- width: 34,
51
+ width: 45,
46
52
  textAlign: 'center',
47
53
  overflow: 'visible',
48
54
  fontSize: 12,
49
- height: 20,
50
- padding: 0,
51
- color: theme.colors.textNormal
55
+ height: 30,
56
+ color: theme.colors.textNormal,
57
+ backgroundColor: theme.colors.backgroundGray100,
58
+ paddingVertical: 8,
59
+ paddingRight: 10,
60
+ paddingLeft: 0,
61
+ borderRadius: 7.6,
52
62
  },
53
63
  inputIOS: {
54
- width: 34,
64
+ width: 45,
55
65
  textAlign: 'center',
56
66
  overflow: 'visible',
57
67
  fontSize: 12,
68
+ backgroundColor: theme.colors.backgroundGray100,
69
+ paddingVertical: 8,
70
+ paddingRight: 15,
71
+ paddingLeft: 0,
72
+ borderRadius: 7.6,
58
73
  },
59
74
  icon: {
60
75
  position: 'absolute',
61
76
  zIndex: 1,
62
- top: -4,
63
- end: -4,
77
+ top: 0,
78
+ end: 8,
64
79
  },
65
80
  placeholder: {
66
81
  color: theme.colors.secundaryContrast
@@ -74,9 +89,7 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
74
89
 
75
90
  const [isActive, setActiveState] = useState(false)
76
91
  const [isServiceOpen, setIsServiceOpen] = useState(false)
77
- const [productQuantityState, setProductQuantityState] = useState(product.quantity.toString())
78
- // const [setHeight, setHeightState] = useState({ height: new Animated.Value(0) })
79
- // const [setRotate, setRotateState] = useState({ angle: new Animated.Value(0) })
92
+ const [productQuantityState, setProductQuantityState] = useState<any>(product.quantity.toString())
80
93
 
81
94
  const productInfo = () => {
82
95
  if (isCartProduct) {
@@ -104,20 +117,6 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
104
117
  setIsServiceOpen(true)
105
118
  }
106
119
 
107
- /* const toggleAccordion = () => {
108
- if ((!product?.valid_menu && isCartProduct)) return
109
- if (isActive) {
110
- Animated.timing(setHeight.height, {
111
- toValue: 100,
112
- duration: 500,
113
- easing: Easing.linear,
114
- useNativeDriver: false,
115
- }).start()
116
- } else {
117
- setHeightState({height: new Animated.Value(0)})
118
- }
119
- }*/
120
-
121
120
  const handleChangeQuantity = (value: string) => {
122
121
  if (!orderState.loading) {
123
122
  setProductQuantityState(value)
@@ -134,10 +133,6 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
134
133
  return `${quantity} x ${name} ${pos} +${price}`
135
134
  }
136
135
 
137
- /*useEffect(() => {
138
- toggleAccordion()
139
- }, [isActive])*/
140
-
141
136
  const productOptions = getProductMax && [...Array(getProductMax(product) + 1),].map((_: any, opt: number) => {
142
137
  return {
143
138
  label: opt === 0 ? t('REMOVE', 'Remove') : opt.toString(),
@@ -145,19 +140,27 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
145
140
  }
146
141
  })
147
142
 
143
+ useEffect(() => {
144
+ if (product.quantity.toString() === productQuantityState || productQuantityState) {
145
+ setProductQuantityState(null)
146
+ }
147
+ }, [product.quantity])
148
+
148
149
  return (
149
150
  <>
150
151
  <AccordionSection>
151
152
  <Accordion
152
- isValid={product?.valid ?? true}
153
- onPress={() => (!product?.valid_menu && isCartProduct)
154
- ? {}
155
- : setActiveState(!isActive)}
156
153
  activeOpacity={1}
154
+ isValid={product?.valid ?? true}
155
+ onPress={
156
+ (!product?.valid_menu && isCartProduct) ||
157
+ !(productInfo().ingredients.length > 0 || productInfo().options.length > 0 || !!product.comment)
158
+ ? null : () => setActiveState(!isActive)
159
+ }
157
160
  >
158
161
  <View style={{ flexDirection: 'row', alignItems: 'flex-start' }}>
159
162
  <ContentInfo>
160
- {(product?.images || theme?.images?.dummies?.product) && (
163
+ {(product?.images || (!hideProductDummyLogo && theme?.images?.dummies?.product)) && !hideProductImage && (
161
164
  <ProductImage>
162
165
  {isFromCheckout ? (
163
166
  product?.images ? (
@@ -210,16 +213,20 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
210
213
  <RNPickerSelect
211
214
  items={productOptions}
212
215
  onValueChange={handleChangeQuantity}
213
- value={productQuantityState}
216
+ value={productQuantityState ?? product.quantity.toString()}
214
217
  style={pickerStyle}
215
218
  useNativeAndroidPickerStyle={false}
216
219
  placeholder={{}}
217
- touchableWrapperProps={{
218
- style: {
219
- width: 40,
220
- }
221
- }}
222
- Icon={() => <View style={pickerStyle.icon}><OIcon src={theme.images.general.arrow_down} color={theme.colors.textNormal} width={8} /></View>}
220
+ touchableWrapperProps={{ style: { width: 45 } }}
221
+ Icon={() => (
222
+ <View style={pickerStyle.icon}>
223
+ <OIcon
224
+ src={theme.images.general.arrow_down}
225
+ color={theme.colors.textNormal}
226
+ width={8}
227
+ />
228
+ </View>
229
+ )}
223
230
  disabled={orderState.loading}
224
231
  />
225
232
  </ProductInfo>
@@ -312,7 +319,7 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
312
319
  ))}
313
320
  </ProductOptionsList>
314
321
  )}
315
- {!!product.comment && (
322
+ {!!product.comment && !hideProductCommentHide && (
316
323
  <ProductComment>
317
324
  <OText size={10} color={theme.colors.textSecondary}>{t('SPECIAL_COMMENT', 'Special Comment')}</OText>
318
325
  <OText size={10} color={theme.colors.textThird}>{product.comment}</OText>
@@ -17,9 +17,6 @@ export const Accordion = styled.TouchableOpacity`
17
17
 
18
18
  export const ProductInfo = styled.View`
19
19
  margin-horizontal: 7px;
20
- background-color: ${(props: any) => props.theme.colors.backgroundGray100};
21
- padding: 4px 12px 4px 0px;
22
- border-radius: 7.6px;
23
20
  `
24
21
 
25
22
  export const ProductQuantity = styled.View`
@@ -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 = option?.limit_suboptions_by_max ? balance === option?.max || state.quantity === suboption?.max : state.quantity === suboption?.max || (!state.selected && balance === option?.max)
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 (balance === option?.max && option?.suboptions?.length > balance && !(option?.min === 1 && option?.max === 1)) {
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, color: theme.colors.white }}
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, color: '#fff', flexWrap: 'nowrap' }}
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
- <View style={{ padding: 20 }}>
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
- <ScrollView
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, color: '#fff' }}
238
+ textStyle={{ fontSize: 10 }}
242
239
  />
243
240
  </BusinessInfo>
244
241
  </SingleBusinessOffer>
245
242
  )
246
243
  })}
247
- </ScrollView>
248
- </View>
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={{ color: theme.colors.white, paddingRight: 10 }}
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 : string, i : number) => (
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={{ color: theme.colors.white, paddingRight: 10 }}
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={{ color: theme.colors.white, paddingRight: 10 }}
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 : string, i : number) => (
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={{ color: theme.colors.white, paddingRight: 10 }}
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}