ordering-ui-react-native 0.21.78 → 0.21.79-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 (165) 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/PaymentOptionsWebView/index.tsx +1 -0
  5. package/src/components/StripeMethodForm/index.tsx +6 -4
  6. package/src/components/VerifyPhone/styles.tsx +1 -2
  7. package/src/types/index.tsx +3 -1
  8. package/themes/business/index.tsx +4 -0
  9. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +9 -6
  10. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +1 -0
  11. package/themes/business/src/components/BusinessProductList/index.tsx +2 -1
  12. package/themes/business/src/components/Chat/index.tsx +3 -1
  13. package/themes/business/src/components/DriverMap/index.tsx +44 -27
  14. package/themes/business/src/components/GoogleMap/index.tsx +15 -8
  15. package/themes/business/src/components/Home/index.tsx +5 -1
  16. package/themes/business/src/components/LanguageSelector/index.tsx +2 -3
  17. package/themes/business/src/components/LanguageSelector/lang_country.json +515 -70
  18. package/themes/business/src/components/LogoutButton/index.tsx +1 -1
  19. package/themes/business/src/components/MapView/index.tsx +36 -17
  20. package/themes/business/src/components/NewOrderNotification/index.tsx +74 -24
  21. package/themes/business/src/components/OrderDetails/Business.tsx +65 -7
  22. package/themes/business/src/components/OrderDetails/Delivery.tsx +35 -20
  23. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +110 -40
  24. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +61 -35
  25. package/themes/business/src/components/OrderDetails/styles.tsx +39 -3
  26. package/themes/business/src/components/OrderDetails/usePrinterCommands.tsx +220 -0
  27. package/themes/business/src/components/OrderSummary/index.tsx +222 -72
  28. package/themes/business/src/components/OrdersListManager/index.tsx +9 -1
  29. package/themes/business/src/components/OrdersOption/index.tsx +247 -159
  30. package/themes/business/src/components/PhoneInputNumber/index.tsx +8 -5
  31. package/themes/business/src/components/PreviousMessages/index.tsx +12 -0
  32. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +25 -15
  33. package/themes/business/src/components/PreviousOrders/index.tsx +5 -3
  34. package/themes/business/src/components/PrinterEdition/index.tsx +363 -0
  35. package/themes/business/src/components/PrinterEdition/styles.tsx +61 -0
  36. package/themes/business/src/components/PrinterSettings/index.tsx +267 -0
  37. package/themes/business/src/components/PrinterSettings/styles.tsx +30 -0
  38. package/themes/business/src/components/ProductItemAccordion/index.tsx +2 -2
  39. package/themes/business/src/components/ReviewCustomer/index.tsx +2 -0
  40. package/themes/business/src/components/Sessions/index.tsx +187 -0
  41. package/themes/business/src/components/Sessions/styles.tsx +20 -0
  42. package/themes/business/src/components/StoresList/index.tsx +2 -2
  43. package/themes/business/src/components/UserFormDetails/index.tsx +111 -107
  44. package/themes/business/src/components/UserProfileForm/index.tsx +84 -47
  45. package/themes/business/src/components/WebsocketStatus/index.tsx +2 -2
  46. package/themes/business/src/components/shared/OInput.tsx +2 -0
  47. package/themes/business/src/components/shared/OTextarea.tsx +8 -9
  48. package/themes/business/src/hooks/useLocation.tsx +5 -4
  49. package/themes/business/src/types/index.tsx +23 -5
  50. package/themes/business/src/utils/index.tsx +19 -1
  51. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  52. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  53. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  54. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  55. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  56. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  57. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  58. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  59. package/themes/original/index.tsx +13 -1
  60. package/themes/original/src/components/AddressDetails/index.tsx +20 -10
  61. package/themes/original/src/components/AddressForm/index.tsx +32 -17
  62. package/themes/original/src/components/AddressList/index.tsx +8 -7
  63. package/themes/original/src/components/AnalyticsSegment/index.tsx +6 -6
  64. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  65. package/themes/original/src/components/BusinessBasicInformation/index.tsx +6 -9
  66. package/themes/original/src/components/BusinessController/index.tsx +12 -7
  67. package/themes/original/src/components/BusinessItemAccordion/index.tsx +13 -5
  68. package/themes/original/src/components/BusinessListingSearch/BusinessSearchFooter.tsx +2 -3
  69. package/themes/original/src/components/BusinessListingSearch/BusinessSearchHeader.tsx +1 -3
  70. package/themes/original/src/components/BusinessListingSearch/index.tsx +1 -2
  71. package/themes/original/src/components/BusinessPreorder/index.tsx +20 -15
  72. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +5 -5
  73. package/themes/original/src/components/BusinessProductsList/index.tsx +2 -2
  74. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  75. package/themes/original/src/components/BusinessProductsListing/index.tsx +18 -6
  76. package/themes/original/src/components/BusinessTypeFilter/index.tsx +9 -8
  77. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +2 -1
  78. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +1 -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 +38 -11
  82. package/themes/original/src/components/CartContent/index.tsx +21 -8
  83. package/themes/original/src/components/Checkout/index.tsx +108 -60
  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/GiftCardOrdersList/index.tsx +64 -0
  91. package/themes/original/src/components/GiftCard/GiftCardOrdersList/styles.tsx +8 -0
  92. package/themes/original/src/components/GiftCard/GiftCardUI/index.tsx +15 -17
  93. package/themes/original/src/components/GiftCard/PurchaseGiftCard/index.tsx +3 -7
  94. package/themes/original/src/components/GiftCard/RedeemGiftCard/index.tsx +24 -32
  95. package/themes/original/src/components/GiftCard/SendGiftCard/index.tsx +7 -9
  96. package/themes/original/src/components/GiftCard/SingleGiftCard/index.tsx +101 -0
  97. package/themes/original/src/components/GiftCard/SingleGiftCard/styles.tsx +4 -0
  98. package/themes/original/src/components/GiftCard/VerticalGiftCardOrdersLayout/index.tsx +82 -0
  99. package/themes/original/src/components/GiftCard/VerticalGiftCardOrdersLayout/styles.tsx +9 -0
  100. package/themes/original/src/components/GoogleMap/index.tsx +39 -18
  101. package/themes/original/src/components/Help/index.tsx +2 -0
  102. package/themes/original/src/components/HighestRatedBusinesses/index.tsx +1 -1
  103. package/themes/original/src/components/Home/index.tsx +2 -10
  104. package/themes/original/src/components/LoginForm/Otp/index.tsx +0 -3
  105. package/themes/original/src/components/LoginForm/index.tsx +4 -7
  106. package/themes/original/src/components/MessageListing/index.tsx +1 -0
  107. package/themes/original/src/components/Messages/index.tsx +8 -7
  108. package/themes/original/src/components/MomentOption/index.tsx +13 -2
  109. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +7 -3
  110. package/themes/original/src/components/MultiCheckout/index.tsx +139 -87
  111. package/themes/original/src/components/MultiOrdersDetails/index.tsx +2 -1
  112. package/themes/original/src/components/MyOrders/index.tsx +21 -26
  113. package/themes/original/src/components/NavBar/index.tsx +4 -2
  114. package/themes/original/src/components/NetworkError/index.tsx +0 -5
  115. package/themes/original/src/components/NotFoundSource/index.tsx +0 -3
  116. package/themes/original/src/components/OrderDetails/OrderEta.tsx +1 -1
  117. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +5 -7
  118. package/themes/original/src/components/OrderDetails/index.tsx +27 -10
  119. package/themes/original/src/components/OrderDetails/styles.tsx +0 -1
  120. package/themes/original/src/components/OrderProgress/index.tsx +22 -3
  121. package/themes/original/src/components/OrderSummary/index.tsx +28 -9
  122. package/themes/original/src/components/OrderTypeSelector/index.tsx +7 -6
  123. package/themes/original/src/components/OrdersOption/index.tsx +2 -4
  124. package/themes/original/src/components/PaymentOptionStripe/index.tsx +0 -5
  125. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  126. package/themes/original/src/components/PaymentOptions/index.tsx +17 -9
  127. package/themes/original/src/components/PlaceSpot/index.tsx +1 -3
  128. package/themes/original/src/components/PreviousOrders/index.tsx +1 -2
  129. package/themes/original/src/components/ProductForm/ActionButton.tsx +17 -20
  130. package/themes/original/src/components/ProductForm/index.tsx +107 -102
  131. package/themes/original/src/components/ProductItemAccordion/index.tsx +55 -49
  132. package/themes/original/src/components/ProductItemAccordion/styles.tsx +3 -4
  133. package/themes/original/src/components/ProductOptionSubOption/index.tsx +8 -1
  134. package/themes/original/src/components/ProfessionalProfile/index.tsx +4 -5
  135. package/themes/original/src/components/Promotions/index.tsx +6 -9
  136. package/themes/original/src/components/ReviewDriver/index.tsx +1 -1
  137. package/themes/original/src/components/ReviewOrder/index.tsx +2 -2
  138. package/themes/original/src/components/ReviewProducts/index.tsx +1 -1
  139. package/themes/original/src/components/ReviewTrigger/index.tsx +2 -2
  140. package/themes/original/src/components/ServiceForm/index.tsx +52 -54
  141. package/themes/original/src/components/Sessions/index.tsx +3 -3
  142. package/themes/original/src/components/SignupForm/index.tsx +86 -78
  143. package/themes/original/src/components/SingleOrderCard/index.tsx +1 -2
  144. package/themes/original/src/components/SingleProductCard/index.tsx +3 -4
  145. package/themes/original/src/components/SingleProductCard/styles.tsx +0 -3
  146. package/themes/original/src/components/StripeCardForm/index.tsx +0 -3
  147. package/themes/original/src/components/StripeCardsList/index.tsx +10 -3
  148. package/themes/original/src/components/StripeElementsForm/index.tsx +77 -60
  149. package/themes/original/src/components/StripeElementsForm/naked.tsx +48 -1
  150. package/themes/original/src/components/StripeRedirectForm/index.tsx +0 -3
  151. package/themes/original/src/components/TaxInformation/index.tsx +3 -2
  152. package/themes/original/src/components/UpsellingProducts/UpsellingContent.tsx +10 -7
  153. package/themes/original/src/components/UpsellingProducts/UpsellingLayout.tsx +8 -3
  154. package/themes/original/src/components/UserDetails/index.tsx +3 -2
  155. package/themes/original/src/components/UserFormDetails/index.tsx +155 -131
  156. package/themes/original/src/components/UserProfile/index.tsx +11 -2
  157. package/themes/original/src/components/Wallets/index.tsx +6 -3
  158. package/themes/original/src/components/WebsocketStatus/index.tsx +169 -0
  159. package/themes/original/src/components/WebsocketStatus/styles.tsx +28 -0
  160. package/themes/original/src/components/shared/OAlert.tsx +2 -1
  161. package/themes/original/src/components/shared/OButton.tsx +5 -4
  162. package/themes/original/src/components/shared/OInput.tsx +4 -8
  163. package/themes/original/src/types/index.tsx +5 -1
  164. package/themes/original/src/utils/index.tsx +12 -1
  165. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -5,7 +5,7 @@ import { TouchableOpacity, View } from 'react-native'
5
5
  import { OButton, OText } from '../shared';
6
6
  import { Placeholder, PlaceholderLine, Fade } from 'rn-placeholder';
7
7
 
8
- export const ActionButton = (props : any) => {
8
+ export const ActionButton = (props: any) => {
9
9
  const {
10
10
  navigation,
11
11
  isHaveWeight,
@@ -23,27 +23,29 @@ export const ActionButton = (props : any) => {
23
23
  handleUpdateGuest,
24
24
  actionStatus
25
25
  } = props
26
- const [,t] = useLanguage()
26
+ const [, t] = useLanguage()
27
27
  const [{ auth }] = useSession()
28
28
  const [orderState] = useOrder()
29
29
  const theme = useTheme()
30
- const [{ configs }] = useConfig()
30
+ const [{ configs }] = useConfig()
31
31
  const unaddressedTypes = configs?.unaddressed_order_types_allowed?.value.split('|').map((value: any) => Number(value)) || []
32
- const isAllowUnaddressOrderType = unaddressedTypes.includes(orderState?.options?.type)
33
-
32
+ const isAllowUnaddressOrderType = unaddressedTypes.includes(orderState?.options?.type)
34
33
  const saveErrors =
35
- orderState.loading ||
36
- maxProductQuantity === 0 ||
37
- Object.keys(errors)?.length > 0;
34
+ orderState.loading ||
35
+ maxProductQuantity === 0 ||
36
+ Object.keys(errors)?.length > 0;
37
+ const buttonColor = saveErrors || isSoldOut || maxProductQuantity <= 0 || (product?.minimum_per_order && ((productCart?.quantity + productAddedToCartLength) < product?.minimum_per_order)) || (product?.maximum_per_order && ((productCart?.quantity + productAddedToCartLength) > product?.maximum_per_order))
38
+
39
+
38
40
 
39
41
  return (
40
42
  <View
41
43
  style={{
42
44
  width: isHaveWeight ? '100%' : ((isSoldOut || maxProductQuantity <= 0) ? '60%' : '40%'),
43
45
  }}>
44
- {((productCart &&
46
+ {(productCart &&
45
47
  auth &&
46
- (orderState.options?.address_id || isAllowUnaddressOrderType)) || (isSoldOut || maxProductQuantity <= 0)) && (
48
+ ((orderState.options?.address_id || isAllowUnaddressOrderType) || (isSoldOut || maxProductQuantity <= 0))) && (
47
49
  <OButton
48
50
  onClick={() => handleSaveProduct()}
49
51
  imgRightSrc=""
@@ -55,15 +57,11 @@ export const ActionButton = (props : any) => {
55
57
  ? t('UPDATE', 'Update')
56
58
  : t('ADD', 'Add')
57
59
  }`}
58
- isDisabled={isSoldOut || maxProductQuantity <= 0 || (product?.minimum_per_order && ((productCart?.quantity + productAddedToCartLength) < product?.minimum_per_order)) || (product?.maximum_per_order && ((productCart?.quantity + productAddedToCartLength) > product?.maximum_per_order))}
60
+ isDisabled={buttonColor}
59
61
  textStyle={{
60
- color: saveErrors || isSoldOut || maxProductQuantity <= 0 ? theme.colors.primary : theme.colors.white,
61
62
  fontSize: orderState.loading || editMode ? 10 : 14
62
63
  }}
63
64
  style={{
64
- backgroundColor: saveErrors || isSoldOut || maxProductQuantity <= 0 || (product?.minimum_per_order && ((productCart?.quantity + productAddedToCartLength) < product?.minimum_per_order)) || (product?.maximum_per_order && ((productCart?.quantity + productAddedToCartLength) > product?.maximum_per_order)) ? theme.colors.lightGray : theme.colors.primary,
65
- borderColor: saveErrors || isSoldOut || maxProductQuantity <= 0 || (product?.minimum_per_order && ((productCart?.quantity + productAddedToCartLength) < product?.minimum_per_order)) || (product?.maximum_per_order && ((productCart?.quantity + productAddedToCartLength) > product?.maximum_per_order)) ? theme.colors.white : theme.colors.primary,
66
- opacity: saveErrors || isSoldOut || maxProductQuantity <= 0 ? 0.3 : 1,
67
65
  borderRadius: 7.6,
68
66
  height: 44,
69
67
  shadowOpacity: 0,
@@ -82,7 +80,7 @@ export const ActionButton = (props : any) => {
82
80
  textStyle={{ fontSize: 10 }}
83
81
  />
84
82
  ) : (
85
- <OButton onClick={navigation.navigate('AddressList')} />
83
+ <OButton onClick={() => navigation.navigate('AddressList')} />
86
84
  ))}
87
85
  {!auth && (
88
86
  <OButton
@@ -94,13 +92,12 @@ export const ActionButton = (props : any) => {
94
92
  : t('LOGIN_SIGNUP', 'Login / Sign Up')
95
93
  }
96
94
  imgRightSrc=""
97
- textStyle={{ color: theme.colors.primary, fontSize: 13, textAlign: 'center' }}
95
+ textStyle={{ fontSize: 13, textAlign: 'center' }}
98
96
  style={{
99
97
  height: 42,
100
- borderColor: theme.colors.primary,
101
- backgroundColor: theme.colors.white,
102
98
  paddingLeft: 0,
103
- paddingRight: 0
99
+ paddingRight: 0,
100
+ borderRadius: 7.6
104
101
  }}
105
102
  />
106
103
  )}
@@ -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,29 +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
42
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
43
48
 
44
49
  const pickerStyle = StyleSheet.create({
45
50
  inputAndroid: {
46
- width: 34,
51
+ width: 45,
47
52
  textAlign: 'center',
48
53
  overflow: 'visible',
49
54
  fontSize: 12,
50
- height: 20,
51
- padding: 0,
52
- 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,
53
62
  },
54
63
  inputIOS: {
55
- width: 34,
64
+ width: 45,
56
65
  textAlign: 'center',
57
66
  overflow: 'visible',
58
67
  fontSize: 12,
68
+ backgroundColor: theme.colors.backgroundGray100,
69
+ paddingVertical: 8,
70
+ paddingRight: 15,
71
+ paddingLeft: 0,
72
+ borderRadius: 7.6,
59
73
  },
60
74
  icon: {
61
75
  position: 'absolute',
62
76
  zIndex: 1,
63
- top: -4,
64
- end: -4,
77
+ top: 0,
78
+ end: 8,
65
79
  },
66
80
  placeholder: {
67
81
  color: theme.colors.secundaryContrast
@@ -75,9 +89,7 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
75
89
 
76
90
  const [isActive, setActiveState] = useState(false)
77
91
  const [isServiceOpen, setIsServiceOpen] = useState(false)
78
- // const [setHeight, setHeightState] = useState({ height: new Animated.Value(0) })
79
- // const [setRotate, setRotateState] = useState({ angle: new Animated.Value(0) })
80
- const [productQuantity, setProductQuantity] = useState(product.quantity.toString())
92
+ const [productQuantityState, setProductQuantityState] = useState<any>(product.quantity.toString())
81
93
 
82
94
  const productInfo = () => {
83
95
  if (isCartProduct) {
@@ -105,23 +117,9 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
105
117
  setIsServiceOpen(true)
106
118
  }
107
119
 
108
- /* const toggleAccordion = () => {
109
- if ((!product?.valid_menu && isCartProduct)) return
110
- if (isActive) {
111
- Animated.timing(setHeight.height, {
112
- toValue: 100,
113
- duration: 500,
114
- easing: Easing.linear,
115
- useNativeDriver: false,
116
- }).start()
117
- } else {
118
- setHeightState({height: new Animated.Value(0)})
119
- }
120
- }*/
121
-
122
120
  const handleChangeQuantity = (value: string) => {
123
121
  if (!orderState.loading) {
124
- setProductQuantity(value)
122
+ setProductQuantityState(value)
125
123
  if (parseInt(value) === 0) {
126
124
  onDeleteProduct && onDeleteProduct(product)
127
125
  } else {
@@ -135,10 +133,6 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
135
133
  return `${quantity} x ${name} ${pos} +${price}`
136
134
  }
137
135
 
138
- /*useEffect(() => {
139
- toggleAccordion()
140
- }, [isActive])*/
141
-
142
136
  const productOptions = getProductMax && [...Array(getProductMax(product) + 1),].map((_: any, opt: number) => {
143
137
  return {
144
138
  label: opt === 0 ? t('REMOVE', 'Remove') : opt.toString(),
@@ -146,19 +140,27 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
146
140
  }
147
141
  })
148
142
 
143
+ useEffect(() => {
144
+ if (product.quantity.toString() === productQuantityState || productQuantityState) {
145
+ setProductQuantityState(null)
146
+ }
147
+ }, [product.quantity])
148
+
149
149
  return (
150
150
  <>
151
151
  <AccordionSection>
152
152
  <Accordion
153
- isValid={product?.valid ?? true}
154
- onPress={() => (!product?.valid_menu && isCartProduct)
155
- ? {}
156
- : setActiveState(!isActive)}
157
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
+ }
158
160
  >
159
161
  <View style={{ flexDirection: 'row', alignItems: 'flex-start' }}>
160
162
  <ContentInfo>
161
- {(product?.images || theme?.images?.dummies?.product) && (
163
+ {(product?.images || (!hideProductDummyLogo && theme?.images?.dummies?.product)) && !hideProductImage && (
162
164
  <ProductImage>
163
165
  {isFromCheckout ? (
164
166
  product?.images ? (
@@ -211,16 +213,20 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
211
213
  <RNPickerSelect
212
214
  items={productOptions}
213
215
  onValueChange={handleChangeQuantity}
214
- value={productQuantity}
216
+ value={productQuantityState ?? product.quantity.toString()}
215
217
  style={pickerStyle}
216
218
  useNativeAndroidPickerStyle={false}
217
219
  placeholder={{}}
218
- touchableWrapperProps={{
219
- style: {
220
- width: 40,
221
- }
222
- }}
223
- 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
+ )}
224
230
  disabled={orderState.loading}
225
231
  />
226
232
  </ProductInfo>
@@ -281,21 +287,21 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
281
287
  )}
282
288
  </Accordion>
283
289
 
284
- <View style={{ display: isActive ? 'flex' : 'none', paddingStart: 40 }}>
290
+ <View style={{ display: isActive ? 'flex' : 'none', paddingStart: isFromCheckout ? 100 : 40, marginTop: isFromCheckout ? -80 : -30 }}>
285
291
  <Animated.View>
286
292
  <AccordionContent>
287
293
  {productInfo().ingredients.length > 0 && productInfo().ingredients.some((ingredient: any) => !ingredient.selected) && (
288
294
  <ProductOptionsList>
289
295
  <OText size={10} color={theme.colors.textSecondary}>{t('INGREDIENTS', 'Ingredients')}</OText>
290
- {productInfo().ingredients.map((ingredient: any) => !ingredient.selected && (
291
- <OText size={10} color={theme.colors.textThird} key={ingredient.id} style={{ marginLeft: 10 }}>{t('NO', 'No')} {ingredient.name}</OText>
296
+ {productInfo().ingredients.map((ingredient: any, i) => !ingredient.selected && (
297
+ <OText size={10} color={theme.colors.textThird} key={ingredient.id + i} style={{ marginLeft: 10 }}>{t('NO', 'No')} {ingredient.name}</OText>
292
298
  ))}
293
299
  </ProductOptionsList>
294
300
  )}
295
301
  {productInfo().options.length > 0 && (
296
302
  <ProductOptionsList>
297
- {productInfo().options.sort((a: any, b: any) => a.rank - b.rank).map((option: any, i: number) => (
298
- <ProductOption key={option.id + i}>
303
+ {productInfo().options.sort((a: any, b: any) => a.rank - b.rank).map((option: any) => (
304
+ <ProductOption key={option.id}>
299
305
  <OText size={10} color={theme.colors.textSecondary}>{option.name}</OText>
300
306
  {option.suboptions.map((suboption: any) => (
301
307
  <ProductSubOption key={suboption.id}>
@@ -313,7 +319,7 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
313
319
  ))}
314
320
  </ProductOptionsList>
315
321
  )}
316
- {!!product.comment && (
322
+ {!!product.comment && !hideProductCommentHide && (
317
323
  <ProductComment>
318
324
  <OText size={10} color={theme.colors.textSecondary}>{t('SPECIAL_COMMENT', 'Special Comment')}</OText>
319
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`
@@ -54,4 +51,6 @@ export const ProductSubOption = styled.View`
54
51
  margin-left: 0px;
55
52
  `
56
53
 
57
- export const ProductComment = styled.View``
54
+ export const ProductComment = styled.View`
55
+ margin-left: 20px;
56
+ `
@@ -35,7 +35,8 @@ export const ProductOptionSubOptionUI = (props: any) => {
35
35
  disabled,
36
36
  setIsScrollAvailable,
37
37
  image,
38
- enableIntersection
38
+ enableIntersection,
39
+ onChange
39
40
  } = props
40
41
 
41
42
  const disableIncrement = option?.limit_suboptions_by_max ? balance === option?.max || state.quantity === suboption?.max : state.quantity === suboption?.max || (!state.selected && balance === option?.max)
@@ -88,6 +89,12 @@ export const ProductOptionSubOptionUI = (props: any) => {
88
89
  }
89
90
  }, [balance])
90
91
 
92
+ useEffect(() => {
93
+ if (!suboption?.preselected || !option?.respect_to) return
94
+ const newState = { ...state, selected: suboption?.preselected, quantity: state.selected ? 0 : 1 }
95
+ onChange(newState, suboption, option)
96
+ }, [suboption, option])
97
+
91
98
  return (
92
99
  <InView onChange={(inView: boolean) => handleChangeInterSection(inView)} triggerOnce={true}>
93
100
  {isIntersectionObserver ? (
@@ -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 }}