ordering-ui-react-native 0.16.69 → 0.16.70-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 (203) hide show
  1. package/package.json +6 -5
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/ActiveOrders/styles.tsx +8 -14
  4. package/src/components/BusinessInformation/index.tsx +19 -4
  5. package/src/components/BusinessInformation/styles.tsx +2 -2
  6. package/src/components/BusinessProductsList/index.tsx +10 -10
  7. package/src/components/BusinessesListing/index.tsx +1 -1
  8. package/src/components/Checkout/index.tsx +2 -1
  9. package/src/components/LanguageSelector/index.tsx +21 -16
  10. package/src/components/Messages/index.tsx +2 -2
  11. package/src/components/OrdersOption/index.tsx +54 -56
  12. package/src/components/PaymentOptions/index.tsx +298 -345
  13. package/src/components/PaymentOptionsWebView/index.tsx +119 -120
  14. package/src/components/SingleProductReview/index.tsx +7 -4
  15. package/src/components/StripeElementsForm/index.tsx +25 -16
  16. package/src/components/VerifyPhone/styles.tsx +1 -2
  17. package/src/components/shared/OToast.tsx +4 -4
  18. package/src/types/@fatnlazycat/react-native-recaptcha-v3/index.d.ts +1 -0
  19. package/src/utils/index.tsx +2 -1
  20. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +260 -238
  21. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +6 -4
  22. package/themes/business/src/components/BusinessController/index.tsx +2 -2
  23. package/themes/business/src/components/Chat/index.tsx +31 -31
  24. package/themes/business/src/components/DriverMap/index.tsx +7 -5
  25. package/themes/business/src/components/LoginForm/index.tsx +111 -74
  26. package/themes/business/src/components/MapView/index.tsx +14 -3
  27. package/themes/business/src/components/MessagesOption/index.tsx +11 -1
  28. package/themes/business/src/components/NewOrderNotification/index.tsx +31 -41
  29. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +70 -43
  30. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +3 -3
  31. package/themes/business/src/components/OrdersOption/index.tsx +63 -73
  32. package/themes/business/src/components/OrdersOption/styles.tsx +5 -1
  33. package/themes/business/src/components/OrdersOptionBusiness/index.tsx +15 -1
  34. package/themes/business/src/components/OrdersOptionCity/index.tsx +15 -1
  35. package/themes/business/src/components/OrdersOptionDate/index.tsx +19 -6
  36. package/themes/business/src/components/OrdersOptionDelivery/index.tsx +15 -1
  37. package/themes/business/src/components/OrdersOptionDriver/index.tsx +15 -1
  38. package/themes/business/src/components/OrdersOptionPaymethod/index.tsx +15 -1
  39. package/themes/business/src/components/OrdersOptionStatus/index.tsx +10 -1
  40. package/themes/business/src/components/PreviousMessages/index.tsx +17 -18
  41. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +250 -0
  42. package/themes/business/src/components/PreviousOrders/OrdersGroupedItem.tsx +115 -0
  43. package/themes/business/src/components/PreviousOrders/index.tsx +440 -245
  44. package/themes/business/src/components/PreviousOrders/styles.tsx +31 -3
  45. package/themes/business/src/components/ProductItemAccordion/index.tsx +3 -2
  46. package/themes/business/src/components/ReviewCustomer/index.tsx +39 -15
  47. package/themes/business/src/components/shared/ODropDown.tsx +42 -8
  48. package/themes/business/src/components/shared/ODropDownCalendar.tsx +36 -7
  49. package/themes/business/src/components/shared/OLink.tsx +33 -13
  50. package/themes/business/src/components/shared/OText.tsx +8 -2
  51. package/themes/business/src/types/index.tsx +14 -3
  52. package/themes/business/src/utils/index.tsx +10 -0
  53. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  54. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  55. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  56. package/themes/kiosk/src/components/BusinessesListing/index.tsx +2 -1
  57. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  58. package/themes/kiosk/src/components/LoginForm/index.tsx +121 -10
  59. package/themes/kiosk/src/components/LoginForm/styles.tsx +5 -0
  60. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  61. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  62. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  63. package/themes/kiosk/src/components/ProductForm/index.tsx +1 -14
  64. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  65. package/themes/kiosk/src/types/index.d.ts +2 -0
  66. package/themes/original/index.tsx +6 -0
  67. package/themes/original/src/components/AddressDetails/index.tsx +10 -8
  68. package/themes/original/src/components/AddressForm/index.tsx +153 -137
  69. package/themes/original/src/components/AddressList/index.tsx +18 -18
  70. package/themes/original/src/components/AddressList/styles.tsx +4 -2
  71. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  72. package/themes/original/src/components/BusinessBasicInformation/index.tsx +49 -33
  73. package/themes/original/src/components/BusinessController/index.tsx +101 -70
  74. package/themes/original/src/components/BusinessController/styles.tsx +14 -9
  75. package/themes/original/src/components/BusinessInformation/index.tsx +10 -31
  76. package/themes/original/src/components/BusinessItemAccordion/index.tsx +12 -6
  77. package/themes/original/src/components/BusinessListingSearch/BusinessControllerSkeletons/index.tsx +57 -0
  78. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/index.tsx +59 -0
  79. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/styles.tsx +13 -0
  80. package/themes/original/src/components/BusinessListingSearch/index.tsx +87 -142
  81. package/themes/original/src/components/BusinessListingSearch/styles.tsx +10 -12
  82. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +87 -0
  83. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/styles.tsx +12 -0
  84. package/themes/original/src/components/BusinessProductsList/index.tsx +41 -62
  85. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  86. package/themes/original/src/components/BusinessProductsListing/index.tsx +561 -479
  87. package/themes/original/src/components/BusinessProductsListing/styles.tsx +13 -12
  88. package/themes/original/src/components/BusinessTypeFilter/index.tsx +3 -2
  89. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +2 -1
  90. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +93 -98
  91. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -9
  92. package/themes/original/src/components/BusinessesListing/index.tsx +8 -8
  93. package/themes/original/src/components/Cart/index.tsx +75 -42
  94. package/themes/original/src/components/CartContent/index.tsx +80 -18
  95. package/themes/original/src/components/CartContent/styles.tsx +11 -1
  96. package/themes/original/src/components/Checkout/index.tsx +110 -114
  97. package/themes/original/src/components/Checkout/styles.tsx +4 -3
  98. package/themes/original/src/components/CitiesControl/index.tsx +89 -0
  99. package/themes/original/src/components/CitiesControl/styles.tsx +17 -0
  100. package/themes/original/src/components/DriverTips/index.tsx +47 -37
  101. package/themes/original/src/components/DriverTips/styles.tsx +2 -1
  102. package/themes/original/src/components/Favorite/index.tsx +7 -4
  103. package/themes/original/src/components/Favorite/styles.tsx +1 -1
  104. package/themes/original/src/components/FavoriteList/index.tsx +70 -80
  105. package/themes/original/src/components/FloatingButton/index.tsx +1 -2
  106. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  107. package/themes/original/src/components/GPSButton/index.tsx +20 -19
  108. package/themes/original/src/components/GPSButton/styles.ts +3 -3
  109. package/themes/original/src/components/GoogleMap/index.tsx +10 -1
  110. package/themes/original/src/components/Help/index.tsx +7 -7
  111. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +14 -20
  112. package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +6 -0
  113. package/themes/original/src/components/HelpGuide/index.tsx +12 -11
  114. package/themes/original/src/components/HelpGuide/styles.tsx +5 -0
  115. package/themes/original/src/components/HelpOrder/index.tsx +12 -20
  116. package/themes/original/src/components/HelpOrder/styles.tsx +8 -1
  117. package/themes/original/src/components/LanguageSelector/index.tsx +19 -14
  118. package/themes/original/src/components/LastOrder/index.tsx +1 -34
  119. package/themes/original/src/components/LoginForm/Otp/index.tsx +89 -73
  120. package/themes/original/src/components/LoginForm/Otp/styles.tsx +0 -1
  121. package/themes/original/src/components/LoginForm/index.tsx +98 -41
  122. package/themes/original/src/components/LottieAnimation/index.tsx +78 -0
  123. package/themes/original/src/components/MessageListing/index.tsx +7 -40
  124. package/themes/original/src/components/Messages/index.tsx +35 -20
  125. package/themes/original/src/components/MomentOption/index.tsx +17 -11
  126. package/themes/original/src/components/MultiCart/index.tsx +50 -0
  127. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +92 -93
  128. package/themes/original/src/components/MultiCheckout/index.tsx +158 -77
  129. package/themes/original/src/components/MultiOrdersDetails/SingleOrderCard.tsx +37 -224
  130. package/themes/original/src/components/MultiOrdersDetails/index.tsx +85 -34
  131. package/themes/original/src/components/MultiOrdersDetails/styles.tsx +1 -1
  132. package/themes/original/src/components/MyOrders/index.tsx +86 -20
  133. package/themes/original/src/components/NavBar/index.tsx +7 -6
  134. package/themes/original/src/components/NetworkError/index.tsx +5 -3
  135. package/themes/original/src/components/NotFoundSource/index.tsx +2 -1
  136. package/themes/original/src/components/Notifications/index.tsx +144 -0
  137. package/themes/original/src/components/Notifications/styles.tsx +20 -0
  138. package/themes/original/src/components/OrderDetails/index.tsx +115 -215
  139. package/themes/original/src/components/OrderDetails/styles.tsx +15 -2
  140. package/themes/original/src/components/OrderItAgain/index.tsx +46 -43
  141. package/themes/original/src/components/OrderProgress/index.tsx +79 -100
  142. package/themes/original/src/components/OrderProgress/styles.tsx +5 -0
  143. package/themes/original/src/components/OrderSummary/index.tsx +3 -36
  144. package/themes/original/src/components/OrderTypeSelector/index.tsx +13 -6
  145. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +94 -98
  146. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +3 -0
  147. package/themes/original/src/components/OrdersOption/index.tsx +97 -88
  148. package/themes/original/src/components/PaymentOptionStripe/styles.tsx +1 -1
  149. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  150. package/themes/original/src/components/PaymentOptions/index.tsx +1 -2
  151. package/themes/original/src/components/PhoneInputNumber/index.tsx +1 -1
  152. package/themes/original/src/components/PlaceSpot/index.tsx +249 -47
  153. package/themes/original/src/components/PlaceSpot/styles.tsx +0 -2
  154. package/themes/original/src/components/PreviousOrders/index.tsx +3 -2
  155. package/themes/original/src/components/ProductForm/index.tsx +212 -253
  156. package/themes/original/src/components/ProductForm/styles.tsx +5 -8
  157. package/themes/original/src/components/ProductItemAccordion/index.tsx +199 -128
  158. package/themes/original/src/components/ProductOptionSubOption/index.tsx +17 -9
  159. package/themes/original/src/components/ProductOptionSubOption/styles.tsx +1 -2
  160. package/themes/original/src/components/ProfessionalFilter/index.tsx +2 -1
  161. package/themes/original/src/components/ProfessionalProfile/index.tsx +19 -8
  162. package/themes/original/src/components/Promotions/index.tsx +234 -220
  163. package/themes/original/src/components/Promotions/styles.tsx +7 -2
  164. package/themes/original/src/components/ReviewDriver/index.tsx +3 -3
  165. package/themes/original/src/components/ReviewOrder/index.tsx +43 -11
  166. package/themes/original/src/components/ReviewOrder/styles.tsx +7 -0
  167. package/themes/original/src/components/ReviewProducts/index.tsx +8 -5
  168. package/themes/original/src/components/ReviewTrigger/index.tsx +27 -9
  169. package/themes/original/src/components/ReviewTrigger/styles.tsx +8 -1
  170. package/themes/original/src/components/ScheduleAccordion/index.tsx +68 -0
  171. package/themes/original/src/components/ScheduleAccordion/styles.tsx +14 -0
  172. package/themes/original/src/components/ServiceForm/index.tsx +328 -264
  173. package/themes/original/src/components/SignupForm/index.tsx +134 -89
  174. package/themes/original/src/components/SingleOrderCard/index.tsx +129 -54
  175. package/themes/original/src/components/SingleOrderCard/styles.tsx +10 -8
  176. package/themes/original/src/components/SingleProductCard/index.tsx +85 -82
  177. package/themes/original/src/components/SingleProductCard/styles.tsx +2 -9
  178. package/themes/original/src/components/SingleProductReview/index.tsx +38 -5
  179. package/themes/original/src/components/SingleProductReview/styles.tsx +12 -0
  180. package/themes/original/src/components/StripeCardsList/index.tsx +1 -1
  181. package/themes/original/src/components/StripeElementsForm/index.tsx +13 -2
  182. package/themes/original/src/components/UpsellingProducts/index.tsx +244 -215
  183. package/themes/original/src/components/UpsellingProducts/styles.tsx +12 -1
  184. package/themes/original/src/components/UserDetails/index.tsx +5 -3
  185. package/themes/original/src/components/UserFormDetails/index.tsx +6 -48
  186. package/themes/original/src/components/UserProfile/index.tsx +58 -35
  187. package/themes/original/src/components/UserProfile/styles.ts +17 -0
  188. package/themes/original/src/components/UserProfileForm/index.tsx +19 -28
  189. package/themes/original/src/components/UserProfileForm/styles.tsx +7 -0
  190. package/themes/original/src/components/WalletTransactions/index.tsx +76 -0
  191. package/themes/original/src/components/WalletTransactions/styles.tsx +13 -0
  192. package/themes/original/src/components/Wallets/index.tsx +230 -164
  193. package/themes/original/src/components/Wallets/styles.tsx +12 -8
  194. package/themes/original/src/components/shared/CardAnimation.tsx +47 -0
  195. package/themes/original/src/components/shared/HeaderTitle.tsx +8 -3
  196. package/themes/original/src/components/shared/OBottomPopup.tsx +6 -4
  197. package/themes/original/src/components/shared/OButton.tsx +9 -4
  198. package/themes/original/src/components/shared/OIcon.tsx +8 -1
  199. package/themes/original/src/components/shared/OInput.tsx +10 -1
  200. package/themes/original/src/layouts/Container.tsx +13 -9
  201. package/themes/original/src/types/index.tsx +44 -6
  202. package/themes/original/src/utils/index.tsx +305 -58
  203. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -0,0 +1,50 @@
1
+ import React from 'react'
2
+ import { View } from 'react-native'
3
+ import { Placeholder, PlaceholderLine, Fade } from 'rn-placeholder'
4
+ import { useTheme } from 'styled-components/native';
5
+ import { MultiCartCreate } from 'ordering-components/native'
6
+
7
+ import { Container } from '../../layouts/Container';
8
+ import { ChContainer, ChSection, ChUserDetails } from '../Checkout/styles'
9
+
10
+ export const MultiCartUI = () => {
11
+ const theme = useTheme();
12
+ return (
13
+ <Container noPadding>
14
+ <ChContainer style={{ paddingHorizontal: 40 }}>
15
+ <ChSection>
16
+ <ChUserDetails>
17
+ <Placeholder Animation={Fade}>
18
+ <PlaceholderLine height={20} />
19
+ <PlaceholderLine height={20} />
20
+ <PlaceholderLine height={20} />
21
+ <PlaceholderLine height={20} style={{ marginBottom: 20 }} />
22
+ </Placeholder>
23
+ <View style={{ height: 8, backgroundColor: theme.colors.backgroundGray100, marginHorizontal: -40, marginBottom: 20 }} />
24
+ <Placeholder Animation={Fade}>
25
+ <PlaceholderLine height={20} />
26
+ <PlaceholderLine height={20} />
27
+ <PlaceholderLine height={20} />
28
+ <PlaceholderLine height={20} style={{ marginBottom: 20 }} />
29
+ </Placeholder>
30
+ <View style={{ height: 8, backgroundColor: theme.colors.backgroundGray100, marginHorizontal: -40, marginBottom: 20 }} />
31
+ <Placeholder Animation={Fade}>
32
+ <PlaceholderLine height={20} />
33
+ <PlaceholderLine height={120} style={{ marginBottom: 20, borderRadius: 8 }} />
34
+ <PlaceholderLine height={20} />
35
+ <PlaceholderLine height={20} />
36
+ </Placeholder>
37
+ </ChUserDetails>
38
+ </ChSection>
39
+ </ChContainer>
40
+ </Container>
41
+ )
42
+ }
43
+
44
+ export const MultiCart = (props: any) => {
45
+ const mulcartProps = {
46
+ ...props,
47
+ UIComponent: MultiCartUI
48
+ }
49
+ return <MultiCartCreate {...mulcartProps} />
50
+ }
@@ -7,7 +7,7 @@ import {
7
7
  } from 'ordering-components/native'
8
8
  import { useTheme } from 'styled-components/native'
9
9
  import { View, TouchableOpacity, FlatList, StyleSheet, KeyboardAvoidingView, Platform } from 'react-native'
10
- import { Placeholder, PlaceholderLine, Fade } from 'rn-placeholder'
10
+ import { Placeholder, PlaceholderLine, Fade } from 'rn-placeholder'
11
11
  import { OText, OIcon, OModal, OButton } from '../shared'
12
12
  import { getIconCard, flatArray } from '../../utils'
13
13
  import { StripeElementsForm } from '../StripeElementsForm'
@@ -25,7 +25,6 @@ const MultiCartsPaymethodsAndWalletsUI = (props: any) => {
25
25
  businessIds,
26
26
  paymethodsAndWallets,
27
27
  walletsState,
28
- businessPaymethods,
29
28
  paymethodSelected,
30
29
  handleSelectPaymethod,
31
30
  handleSelectWallet,
@@ -37,7 +36,7 @@ const MultiCartsPaymethodsAndWalletsUI = (props: any) => {
37
36
  const [{ configs }] = useConfig()
38
37
  const [{ parsePrice }] = useUtils()
39
38
 
40
- const [addCardOpen, setAddCardOpen] = useState({ stripe: false, stripeConnect: false });
39
+ const [addCardOpen, setAddCardOpen] = useState({ stripe: false, stripeConnect: false });
41
40
 
42
41
  const isWalletCashEnabled = configs?.wallet_cash_enabled?.value === '1'
43
42
  const isWalletPointsEnabled = configs?.wallet_credit_point_enabled?.value === '1'
@@ -54,52 +53,52 @@ const MultiCartsPaymethodsAndWalletsUI = (props: any) => {
54
53
  }
55
54
 
56
55
  const getPayIcon = (method: string) => {
57
- switch (method) {
58
- case 'cash':
59
- return theme.images.general.cash
60
- case 'card_delivery':
61
- return theme.images.general.carddelivery
62
- case 'paypal':
63
- return theme.images.general.paypal
64
- case 'stripe':
65
- return theme.images.general.stripe
66
- case 'stripe_direct':
67
- return theme.images.general.stripecc
68
- case 'stripe_connect':
69
- return theme.images.general.stripes
70
- case 'stripe_redirect':
71
- return theme.images.general.stripesb
72
- default:
73
- return theme.images.general.creditCard
74
- }
75
- }
56
+ switch (method) {
57
+ case 'cash':
58
+ return theme.images.general.cash
59
+ case 'card_delivery':
60
+ return theme.images.general.carddelivery
61
+ case 'paypal':
62
+ return theme.images.general.paypal
63
+ case 'stripe':
64
+ return theme.images.general.creditCard
65
+ case 'stripe_direct':
66
+ return theme.images.general.stripecc
67
+ case 'stripe_connect':
68
+ return theme.images.general.stripes
69
+ case 'stripe_redirect':
70
+ return theme.images.general.stripesb
71
+ default:
72
+ return theme.images.general.creditCard
73
+ }
74
+ }
76
75
 
77
76
  const renderPaymethods = ({ item }: any) => {
78
- return (
79
- <TouchableOpacity
80
- onPress={() => handleSelectPaymethod(item)}
81
- >
82
- <PMItem
83
- key={item.id}
84
- isActive={paymethodSelected?.paymethod_id === item.paymethod_id}
85
- >
86
- <OIcon
87
- src={getPayIcon(item.paymethod?.gateway)}
88
- width={20}
89
- height={20}
90
- color={paymethodSelected?.paymethod_id === item.paymethod_id ? theme.colors.white : theme.colors.backgroundDark}
91
- />
92
- <OText
93
- size={10}
94
- style={{ margin: 0, marginTop: 4 }}
95
- color={paymethodSelected?.paymethod_id === item.paymethod_id ? theme.colors.white : '#000'}
96
- >
97
- {t(item?.paymethod?.gateway.toUpperCase(), item?.paymethod?.name)}
98
- </OText>
99
- </PMItem>
100
- </TouchableOpacity>
101
- )
102
- }
77
+ return (
78
+ <TouchableOpacity
79
+ onPress={() => handleSelectPaymethod({ ...item, paymethod: { gateway: item.gateway }, paymethod_id: item?.id })}
80
+ >
81
+ <PMItem
82
+ key={item.id}
83
+ isActive={paymethodSelected?.id === item.id}
84
+ >
85
+ <OIcon
86
+ src={getPayIcon(item?.gateway ?? item.paymethod?.gateway)}
87
+ width={20}
88
+ height={20}
89
+ color={paymethodSelected?.id === item.id ? theme.colors.white : theme.colors.backgroundDark}
90
+ />
91
+ <OText
92
+ size={10}
93
+ style={{ margin: 0, marginTop: 4 }}
94
+ color={paymethodSelected?.id === item.id ? theme.colors.white : '#000'}
95
+ >
96
+ {t(item?.gateway.toUpperCase(), item?.name)}
97
+ </OText>
98
+ </PMItem>
99
+ </TouchableOpacity>
100
+ )
101
+ }
103
102
 
104
103
  return (
105
104
  <PMContainer>
@@ -123,10 +122,10 @@ const MultiCartsPaymethodsAndWalletsUI = (props: any) => {
123
122
  ) : (
124
123
  <FlatList
125
124
  horizontal
126
- showsHorizontalScrollIndicator={false}
127
- data={businessPaymethods.result.filter((paymethod: any) => paymethodsAndWallets.paymethods.find((item: any) => item.id === paymethod.paymethod_id))}
128
- renderItem={renderPaymethods}
129
- keyExtractor={(paymethod: any) => paymethod?.id?.toString?.()}
125
+ showsHorizontalScrollIndicator={false}
126
+ data={paymethodsAndWallets.paymethods}
127
+ renderItem={renderPaymethods}
128
+ keyExtractor={(paymethod: any) => paymethod?.id?.toString?.()}
130
129
  />
131
130
  )}
132
131
  {!paymethodsAndWallets.loading && !paymethodsAndWallets.error && paymethodsAndWallets.paymethods.length === 0 && (
@@ -138,22 +137,22 @@ const MultiCartsPaymethodsAndWalletsUI = (props: any) => {
138
137
  {paymethodSelected?.paymethod?.gateway === 'stripe' && (
139
138
  <View>
140
139
  <OButton
141
- text={t('ADD_PAYMENT_CARD', 'Add New Payment Card')}
142
- bgColor={theme.colors.white}
143
- borderColor={theme.colors.primary}
144
- style={styles.btnAddStyle}
145
- textStyle={{ color: theme.colors.primary, fontSize: 12 }}
146
- imgRightSrc={null}
147
- onClick={() => setAddCardOpen({ ...addCardOpen, stripe: true })}
148
- />
140
+ text={t('ADD_PAYMENT_CARD', 'Add New Payment Card')}
141
+ bgColor={theme.colors.white}
142
+ borderColor={theme.colors.primary}
143
+ style={styles.btnAddStyle}
144
+ textStyle={{ color: theme.colors.primary, fontSize: 12 }}
145
+ imgRightSrc={null}
146
+ onClick={() => setAddCardOpen({ ...addCardOpen, stripe: true })}
147
+ />
149
148
  <StripeCardsList
150
- paymethod={paymethodSelected?.paymethod}
151
- businessId={businessIds[0]}
149
+ paymethod={paymethodSelected?.paymethod}
150
+ businessId={businessIds[0]}
152
151
  businessIds={businessIds}
153
- publicKey={paymethodSelected?.data?.publishable}
154
- payType={paymethodSelected?.paymethod?.name}
155
- onSelectCard={handlePaymethodDataChange}
156
- />
152
+ publicKey={paymethodSelected?.data?.publishable}
153
+ payType={paymethodSelected?.paymethod?.name}
154
+ onSelectCard={handlePaymethodDataChange}
155
+ />
157
156
  </View>
158
157
  )}
159
158
 
@@ -170,7 +169,7 @@ const MultiCartsPaymethodsAndWalletsUI = (props: any) => {
170
169
  </>
171
170
  ) : (
172
171
  <>
173
- {walletsState.result.filter((wallet: any) => paymethodsAndWallets.wallets.find((item: any) => item.type === wallet.type)).map((wallet: any, idx: any) => walletName[wallet.type]?.isActive && (
172
+ {walletsState?.result?.filter((wallet: any) => paymethodsAndWallets.wallets.find((item: any) => item.type === wallet.type)).map((wallet: any, idx: any) => walletName[wallet.type]?.isActive && (
174
173
  <WalletItem
175
174
  key={wallet.type}
176
175
  isBottomBorder={idx === paymethodsAndWallets.wallets?.length - 1}
@@ -197,40 +196,40 @@ const MultiCartsPaymethodsAndWalletsUI = (props: any) => {
197
196
  )}
198
197
 
199
198
  <OModal
200
- entireModal
201
- title={t('ADD_CREDIT_OR_DEBIT_CARD', 'Add credit or debit card')}
202
- open={addCardOpen.stripe}
203
- onClose={() => setAddCardOpen({ ...addCardOpen, stripe: false })}
204
- style={{ backgroundColor: 'red' }}
205
- >
206
- <KeyboardAvoidingView
207
- behavior={Platform.OS == 'ios' ? 'padding' : 'height'}
208
- keyboardVerticalOffset={Platform.OS == 'ios' ? 0 : 0}
209
- enabled={Platform.OS === 'ios' ? true : false}
210
- >
211
- <StripeElementsForm
212
- toSave
213
- businessId={businessIds[0]}
199
+ entireModal
200
+ title={t('ADD_CREDIT_OR_DEBIT_CARD', 'Add credit or debit card')}
201
+ open={addCardOpen.stripe}
202
+ onClose={() => setAddCardOpen({ ...addCardOpen, stripe: false })}
203
+ style={{ backgroundColor: 'red' }}
204
+ >
205
+ <KeyboardAvoidingView
206
+ behavior={Platform.OS == 'ios' ? 'padding' : 'height'}
207
+ keyboardVerticalOffset={Platform.OS == 'ios' ? 0 : 0}
208
+ enabled={Platform.OS === 'ios' ? true : false}
209
+ >
210
+ <StripeElementsForm
211
+ toSave
212
+ businessId={businessIds[0]}
214
213
  businessIds={businessIds}
215
214
  publicKey={paymethodSelected?.data?.publishable}
216
- requirements={props.clientSecret}
217
- onSelectCard={handlePaymethodDataChange}
218
- onCancel={() => setAddCardOpen({ ...addCardOpen, stripe: false })}
219
- />
220
- </KeyboardAvoidingView>
221
- </OModal>
215
+ requirements={props.clientSecret}
216
+ onSelectCard={handlePaymethodDataChange}
217
+ onCancel={() => setAddCardOpen({ ...addCardOpen, stripe: false })}
218
+ />
219
+ </KeyboardAvoidingView>
220
+ </OModal>
222
221
  </PMContainer>
223
222
  )
224
223
  }
225
224
 
226
225
  const styles = StyleSheet.create({
227
- btnAddStyle: {
228
- marginVertical: 20,
229
- borderRadius: 7.6,
230
- shadowOpacity: 0,
231
- height: 44,
232
- borderWidth: 1
233
- },
226
+ btnAddStyle: {
227
+ marginVertical: 20,
228
+ borderRadius: 7.6,
229
+ shadowOpacity: 0,
230
+ height: 44,
231
+ borderWidth: 1
232
+ },
234
233
  })
235
234
 
236
235
 
@@ -7,7 +7,7 @@ import {
7
7
  useValidationFields,
8
8
  useSession,
9
9
  useToast,
10
- ToastType,
10
+ ToastType,
11
11
  MultiCheckout as MultiCheckoutController
12
12
  } from 'ordering-components/native'
13
13
  import { View, StyleSheet, Platform } from 'react-native'
@@ -18,9 +18,12 @@ import { OText, OIcon, OModal } from '../shared';
18
18
  import { getTypesText } from '../../utils';
19
19
  import { UserDetails } from '../UserDetails'
20
20
  import { AddressDetails } from '../AddressDetails'
21
+ import { MultiCart as MultiCartController } from '../MultiCart'
21
22
  import { MultiCartsPaymethodsAndWallets } from '../MultiCartsPaymethodsAndWallets'
22
23
  import { Cart } from '../Cart'
23
24
  import { FloatingButton } from '../FloatingButton'
25
+ import { DriverTips } from '../DriverTips'
26
+ import { DriverTipsContainer } from '../Cart/styles'
24
27
 
25
28
  import {
26
29
  ChContainer,
@@ -36,11 +39,11 @@ import {
36
39
  } from './styles'
37
40
 
38
41
  const mapConfigs = {
39
- mapZoom: 16,
40
- mapSize: {
41
- width: 640,
42
- height: 190
43
- }
42
+ mapZoom: 16,
43
+ mapSize: {
44
+ width: 640,
45
+ height: 190
46
+ }
44
47
  }
45
48
 
46
49
  const MultiCheckoutUI = (props: any) => {
@@ -53,74 +56,79 @@ const MultiCheckoutUI = (props: any) => {
53
56
  paymethodSelected,
54
57
  handleSelectPaymethod,
55
58
  handleSelectWallet,
56
- handlePaymethodDataChange
59
+ handlePaymethodDataChange,
60
+ cartUuid,
61
+ totalCartsFee,
62
+ cartGroup
57
63
  } = props
58
64
 
59
- const theme = useTheme();
65
+ const theme = useTheme();
60
66
  const styles = StyleSheet.create({
61
67
  pagePadding: {
62
- paddingLeft: 40,
63
- paddingRight: 40
64
- },
65
- wrapperNavbar: Platform.OS === 'ios'
66
- ? { paddingVertical: 0, paddingHorizontal: 40 }
67
- : { paddingVertical: 20, paddingHorizontal: 40 }
68
+ paddingLeft: 40,
69
+ paddingRight: 40
70
+ },
71
+ wrapperNavbar: { paddingHorizontal: 40 }
68
72
  })
69
73
 
70
- const [, { showToast }] = useToast();
74
+ const [, { showToast }] = useToast();
71
75
  const [, t] = useLanguage()
72
- const [{ configs }] = useConfig();
73
- const [{ parsePrice, parseDate }] = useUtils();
74
- const [{ options, carts, loading }, { confirmCart }] = useOrder();
75
- const [validationFields] = useValidationFields();
76
+ const [{ configs }] = useConfig();
77
+ const [{ parsePrice, parseDate }] = useUtils();
78
+ const [{ options, carts, loading }, { confirmCart }] = useOrder();
79
+ const [validationFields] = useValidationFields();
76
80
  const [{ user }] = useSession()
77
81
 
78
- const configTypes = configs?.order_types_allowed?.value.split('|').map((value: any) => Number(value)) || []
79
- const isPreOrder = configs?.preorder_status_enabled?.value === '1'
80
- const maximumCarts = 5
81
- const isDisablePlaceOrderButton = !(paymethodSelected?.paymethod_id || paymethodSelected?.wallet_id) || openCarts.length > maximumCarts
82
+ const configTypes = configs?.order_types_allowed?.value.split('|').map((value: any) => Number(value)) || []
83
+ const isPreOrder = configs?.preorder_status_enabled?.value === '1'
84
+ const isMultiDriverTips = theme?.header?.components?.layout?.type?.toLowerCase() === 'chew'
85
+ const isDisablePlaceOrderButton = !(paymethodSelected?.paymethod_id || paymethodSelected?.wallet_id) || (paymethodSelected?.paymethod?.gateway === 'stripe' && !paymethodSelected?.paymethod_data)
86
+ const walletCarts = (Object.values(carts)?.filter((cart: any) => cart?.products && cart?.products?.length && cart?.status !== 2 && cart?.valid_schedule && cart?.valid_products && cart?.valid_address && cart?.valid_maximum && cart?.valid_minimum && cart?.wallets) || null) || []
87
+ const driverTipsOptions = typeof configs?.driver_tip_options?.value === 'string'
88
+ ? JSON.parse(configs?.driver_tip_options?.value) || []
89
+ : configs?.driver_tip_options?.value || []
82
90
 
83
- const [isUserDetailsEdit, setIsUserDetailsEdit] = useState(false);
84
- const [phoneUpdate, setPhoneUpdate] = useState(false);
85
- const [userErrors, setUserErrors] = useState<any>([]);
91
+ const [isUserDetailsEdit, setIsUserDetailsEdit] = useState(false);
92
+ const [phoneUpdate, setPhoneUpdate] = useState(false);
93
+ const [userErrors, setUserErrors] = useState<any>([]);
86
94
  const handleMomentClick = () => {
87
- if (isPreOrder) {
88
- navigation.navigate('MomentOption')
89
- }
90
- }
95
+ if (isPreOrder) {
96
+ navigation.navigate('MomentOption')
97
+ }
98
+ }
91
99
 
92
100
  const checkValidationFields = () => {
93
- setUserErrors([])
94
- const errors = []
95
- const notFields = ['coupon', 'driver_tip', 'mobile_phone', 'address', 'zipcode', 'address_notes']
101
+ setUserErrors([])
102
+ const errors = []
103
+ const notFields = ['coupon', 'driver_tip', 'mobile_phone', 'address', 'zipcode', 'address_notes']
96
104
 
97
- Object.values(validationFields?.fields?.checkout).map((field: any) => {
98
- if (field?.required && !notFields.includes(field.code)) {
99
- if (!user[field?.code]) {
100
- errors.push(t(`VALIDATION_ERROR_${field.code.toUpperCase()}_REQUIRED`, `The field ${field?.name} is required`))
101
- }
102
- }
103
- })
105
+ Object.values(validationFields?.fields?.checkout).map((field: any) => {
106
+ if (field?.required && !notFields.includes(field.code)) {
107
+ if (!user[field?.code]) {
108
+ errors.push(t(`VALIDATION_ERROR_${field.code.toUpperCase()}_REQUIRED`, `The field ${field?.name} is required`))
109
+ }
110
+ }
111
+ })
104
112
 
105
- if (
106
- !user?.cellphone &&
107
- ((validationFields?.fields?.checkout?.cellphone?.enabled &&
108
- validationFields?.fields?.checkout?.cellphone?.required) ||
109
- configs?.verification_phone_required?.value === '1')
110
- ) {
111
- errors.push(t('VALIDATION_ERROR_MOBILE_PHONE_REQUIRED', 'The field Phone number is required'))
112
- }
113
+ if (
114
+ !user?.cellphone &&
115
+ ((validationFields?.fields?.checkout?.cellphone?.enabled &&
116
+ validationFields?.fields?.checkout?.cellphone?.required) ||
117
+ configs?.verification_phone_required?.value === '1')
118
+ ) {
119
+ errors.push(t('VALIDATION_ERROR_MOBILE_PHONE_REQUIRED', 'The field Phone number is required'))
120
+ }
113
121
 
114
- if (phoneUpdate) {
115
- errors.push(t('NECESSARY_UPDATE_COUNTRY_PHONE_CODE', 'It is necessary to update your phone number'))
116
- }
122
+ if (phoneUpdate) {
123
+ errors.push(t('NECESSARY_UPDATE_COUNTRY_PHONE_CODE', 'It is necessary to update your phone number'))
124
+ }
117
125
 
118
- setUserErrors(errors)
119
- }
126
+ setUserErrors(errors)
127
+ }
120
128
 
121
129
  const togglePhoneUpdate = (val: boolean) => {
122
- setPhoneUpdate(val)
123
- }
130
+ setPhoneUpdate(val)
131
+ }
124
132
 
125
133
  const handlePlaceOrder = () => {
126
134
  if (!userErrors.length) {
@@ -128,33 +136,30 @@ const MultiCheckoutUI = (props: any) => {
128
136
  return
129
137
  }
130
138
  let stringError = ''
131
- Object.values(userErrors).map((item: any, i: number) => {
132
- stringError += (i + 1) === userErrors.length ? `- ${item?.message || item}` : `- ${item?.message || item}\n`
133
- })
134
- showToast(ToastType.Error, stringError)
139
+ Object.values(userErrors).map((item: any, i: number) => {
140
+ stringError += (i + 1) === userErrors.length ? `- ${item?.message || item}` : `- ${item?.message || item}\n`
141
+ })
142
+ showToast(ToastType.Error, stringError)
135
143
  setIsUserDetailsEdit(true)
136
144
  }
137
145
 
138
146
  useEffect(() => {
139
- if (validationFields && validationFields?.fields?.checkout) {
140
- checkValidationFields()
141
- }
142
- }, [validationFields, user])
147
+ if (validationFields && validationFields?.fields?.checkout) {
148
+ checkValidationFields()
149
+ }
150
+ }, [validationFields, user])
143
151
 
144
152
  return (
145
153
  <>
146
154
  <Container noPadding>
147
155
  <View style={styles.wrapperNavbar}>
148
156
  <NavBar
149
- isVertical
150
157
  title={t('CHECKOUT', 'Checkout')}
151
158
  titleAlign={'center'}
152
159
  onActionLeft={() => navigation?.canGoBack() && navigation.goBack()}
153
160
  showCall={false}
161
+ paddingTop={Platform.OS === 'ios' ? 0 : 4}
154
162
  btnStyle={{ paddingLeft: 0 }}
155
- style={{ marginTop: Platform.OS === 'ios' ? 0 : 30 }}
156
- titleWrapStyle={{ paddingHorizontal: 0 }}
157
- titleStyle={{ marginRight: 0, marginLeft: 0 }}
158
163
  />
159
164
  </View>
160
165
  <ChContainer style={styles.pagePadding}>
@@ -224,10 +229,40 @@ const MultiCheckoutUI = (props: any) => {
224
229
  handleSelectPaymethod={handleSelectPaymethod}
225
230
  handleSelectWallet={handleSelectWallet}
226
231
  handlePaymethodDataChange={handlePaymethodDataChange}
232
+ cartUuid={cartUuid}
227
233
  />
228
234
  <View style={{ height: 8, backgroundColor: theme.colors.backgroundGray100, marginTop: 13, marginHorizontal: -40 }} />
229
235
  </ChSection>
230
236
 
237
+ {
238
+ isMultiDriverTips &&
239
+ options?.type === 1 &&
240
+ validationFields?.fields?.checkout?.driver_tip?.enabled &&
241
+ openCarts.every((cart: any) => cart.business_id && cart.status !== 2) &&
242
+ driverTipsOptions && driverTipsOptions?.length > 0 &&
243
+ (
244
+ <ChSection>
245
+ <DriverTipsContainer>
246
+ <OText size={14} lineHeight={20} color={theme.colors.textNormal}>
247
+ {t('DRIVER_TIPS', 'Driver Tips')}
248
+ </OText>
249
+ <DriverTips
250
+ isMulti
251
+ carts={openCarts}
252
+ businessIds={openCarts.map((cart: any) => cart.business_id)}
253
+ driverTipsOptions={driverTipsOptions}
254
+ isFixedPrice={parseInt(configs?.driver_tip_type?.value, 10) === 1}
255
+ isDriverTipUseCustom={!!parseInt(configs?.driver_tip_use_custom?.value, 10)}
256
+ driverTip={parseInt(configs?.driver_tip_type?.value, 10) === 1
257
+ ? openCarts[0]?.driver_tip
258
+ : openCarts[0]?.driver_tip_rate}
259
+ useOrderContext
260
+ />
261
+ </DriverTipsContainer>
262
+ <View style={{ height: 8, backgroundColor: theme.colors.backgroundGray100, marginTop: 13, marginHorizontal: -40 }} />
263
+ </ChSection>
264
+ )}
265
+
231
266
  <ChSection>
232
267
  <ChCarts>
233
268
  <CartsHeader>
@@ -241,20 +276,46 @@ const MultiCheckoutUI = (props: any) => {
241
276
  cart={cart}
242
277
  cartuuid={cart.uuid}
243
278
  isMultiCheckout
279
+ hideDeliveryFee={configs?.multi_business_checkout_show_combined_delivery_fee?.value === '1'}
280
+ hideDriverTip={configs?.multi_business_checkout_show_combined_driver_tip?.value === '1'}
244
281
  onNavigationRedirect={(route: string, params: any) => props.navigation.navigate(route, params)}
245
282
  />
246
283
  <View style={{ height: 8, backgroundColor: theme.colors.backgroundGray100, marginTop: 13, marginHorizontal: -40 }} />
247
284
  </React.Fragment>
248
285
  ))}
249
- {openCarts.length === 0 && (
286
+ {!cartGroup?.loading && openCarts.length === 0 && (
250
287
  <CCNotCarts>
251
288
  <OText size={24} style={{ textAlign: 'center' }}>
252
289
  {t('CARTS_NOT_FOUND', 'You don\'t have carts available')}
253
290
  </OText>
254
291
  </CCNotCarts>
255
292
  )}
293
+ {walletCarts.length > 0 && (
294
+ <OText size={14} color={theme.colors.danger5} style={{ marginVertical: 20 }}>
295
+ {t('WARNING_PARTIAL_WALLET_CARTS', 'Important: One or more carts can`t be completed due a partial payment with cash/points wallet and requires to be paid individually')}
296
+ </OText>
297
+ )}
256
298
  {openCarts.length > 0 && (
257
299
  <ChCartsTotal>
300
+ {totalCartsFee && configs?.multi_business_checkout_show_combined_delivery_fee?.value === '1' && (
301
+ <View style={{ flexDirection: 'row', justifyContent: 'space-between' }}>
302
+ <OText size={14} lineHeight={24} color={theme.colors.textNormal} weight={'400'}>
303
+ {t('TOTAL_DELIVERY_FEE', 'Total delivery fee')}
304
+ </OText>
305
+ <OText size={14} lineHeight={24} color={theme.colors.textNormal} weight={'400'}>{parsePrice(totalCartsFee)}</OText>
306
+ </View>
307
+ )}
308
+ {openCarts.reduce((sum: any, cart: any) => sum + cart?.driver_tip, 0) > 0 &&
309
+ configs?.multi_business_checkout_show_combined_driver_tip?.value === '1' && (
310
+ <View style={{ flexDirection: 'row', justifyContent: 'space-between' }}>
311
+ <OText size={14} lineHeight={24} color={theme.colors.textNormal} weight={'400'}>
312
+ {t('DRIVER_TIP', 'Driver tip')}
313
+ </OText>
314
+ <OText size={14} lineHeight={24} color={theme.colors.textNormal} weight={'400'}>
315
+ {parsePrice(openCarts.reduce((sum: any, cart: any) => sum + cart?.driver_tip, 0))}
316
+ </OText>
317
+ </View>
318
+ )}
258
319
  <View style={{ flexDirection: 'row', justifyContent: 'space-between' }}>
259
320
  <OText size={16} lineHeight={24} color={theme.colors.textNormal} weight={'500'}>
260
321
  {t('TOTAL_FOR_ALL_CARTS', 'Total for all Carts')}
@@ -266,23 +327,18 @@ const MultiCheckoutUI = (props: any) => {
266
327
  </OText>
267
328
  </ChCartsTotal>
268
329
  )}
269
- {openCarts.length > maximumCarts && (
270
- <OText size={14} color={theme.colors.danger5} style={{ marginVertical: 20 }}>
271
- {t('WARNING_MAXIMUM_CARTS', 'You can only pay for a maximum of 5 carts, please discard one or more to continue.')}
272
- </OText>
273
- )}
274
330
  </ChCarts>
275
331
  </ChSection>
276
332
  </ChContainer>
277
333
  </Container>
278
-
334
+
279
335
  <FloatingButton
280
- handleClick={() => handlePlaceOrder()}
336
+ handleClick={() => handlePlaceOrder()}
281
337
  isSecondaryBtn={isDisablePlaceOrderButton}
282
338
  disabled={isDisablePlaceOrderButton}
283
339
  btnText={placing ? t('PLACING', 'Placing') : t('PLACE_ORDER', 'Place Order')}
284
340
  btnRightValueShow
285
- btnRightValue={parsePrice(totalCartsPrice)}
341
+ btnRightValue={parsePrice(totalCartsPrice)}
286
342
  iosBottom={30}
287
343
  />
288
344
  </>
@@ -290,9 +346,34 @@ const MultiCheckoutUI = (props: any) => {
290
346
  }
291
347
 
292
348
  export const MultiCheckout = (props: any) => {
349
+ const [loadMultiCarts, setLoadMultiCarts] = useState(!!props.route?.params?.checkCarts)
350
+ const [cartUuid, setCartUuid] = useState('')
351
+
293
352
  const multiCheckoutProps = {
294
353
  ...props,
354
+ cartUuid: props.route?.params?.cartUuid ?? cartUuid,
295
355
  UIComponent: MultiCheckoutUI
296
356
  }
297
- return <MultiCheckoutController {...multiCheckoutProps} />
357
+
358
+ const multiCartProps = {
359
+ ...props,
360
+ handleOnRedirectMultiCheckout: (cartUuid: string) => {
361
+ setCartUuid(cartUuid)
362
+ setLoadMultiCarts(false)
363
+ },
364
+ handleOnRedirectCheckout: (cartUuid: string) => {
365
+ props.navigation.navigate('CheckoutNavigator', {
366
+ screen: 'CheckoutPage',
367
+ cartUuid: cartUuid
368
+ })
369
+ }
370
+ }
371
+
372
+ return (
373
+ loadMultiCarts ? (
374
+ <MultiCartController {...multiCartProps} />
375
+ ) : (
376
+ <MultiCheckoutController {...multiCheckoutProps} />
377
+ )
378
+ )
298
379
  }