ordering-ui-react-native 0.16.79 → 0.16.80-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 (216) hide show
  1. package/package.json +5 -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/LanguageSelector/index.tsx +21 -16
  9. package/src/components/Messages/index.tsx +2 -2
  10. package/src/components/OrderCreating/index.tsx +2 -2
  11. package/src/components/OrdersOption/index.tsx +54 -56
  12. package/src/components/PaymentOptionsWebView/index.tsx +119 -120
  13. package/src/components/SingleProductReview/index.tsx +7 -4
  14. package/src/components/VerifyPhone/styles.tsx +1 -2
  15. package/src/components/shared/OToast.tsx +4 -4
  16. package/src/utils/index.tsx +2 -1
  17. package/themes/business/index.tsx +2 -0
  18. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +260 -238
  19. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +6 -4
  20. package/themes/business/src/components/BusinessController/index.tsx +2 -2
  21. package/themes/business/src/components/Chat/index.tsx +31 -31
  22. package/themes/business/src/components/DriverMap/index.tsx +22 -9
  23. package/themes/business/src/components/LoginForm/Otp/index.tsx +120 -0
  24. package/themes/business/src/components/LoginForm/Otp/styles.tsx +7 -0
  25. package/themes/business/src/components/LoginForm/index.tsx +236 -80
  26. package/themes/business/src/components/LoginForm/styles.tsx +10 -0
  27. package/themes/business/src/components/MapView/index.tsx +14 -3
  28. package/themes/business/src/components/MessagesOption/index.tsx +11 -1
  29. package/themes/business/src/components/NewOrderNotification/index.tsx +31 -41
  30. package/themes/business/src/components/OrderDetails/Delivery.tsx +4 -3
  31. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +88 -47
  32. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +3 -3
  33. package/themes/business/src/components/OrderDetailsLogistic/index.tsx +195 -0
  34. package/themes/business/src/components/OrderDetailsLogistic/styles.tsx +5 -0
  35. package/themes/business/src/components/OrdersOption/index.tsx +63 -73
  36. package/themes/business/src/components/OrdersOption/styles.tsx +5 -1
  37. package/themes/business/src/components/OrdersOptionBusiness/index.tsx +15 -1
  38. package/themes/business/src/components/OrdersOptionCity/index.tsx +15 -1
  39. package/themes/business/src/components/OrdersOptionDate/index.tsx +19 -6
  40. package/themes/business/src/components/OrdersOptionDelivery/index.tsx +15 -1
  41. package/themes/business/src/components/OrdersOptionDriver/index.tsx +15 -1
  42. package/themes/business/src/components/OrdersOptionPaymethod/index.tsx +15 -1
  43. package/themes/business/src/components/OrdersOptionStatus/index.tsx +10 -1
  44. package/themes/business/src/components/PreviousMessages/index.tsx +17 -18
  45. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +250 -0
  46. package/themes/business/src/components/PreviousOrders/OrdersGroupedItem.tsx +115 -0
  47. package/themes/business/src/components/PreviousOrders/index.tsx +447 -247
  48. package/themes/business/src/components/PreviousOrders/styles.tsx +31 -3
  49. package/themes/business/src/components/ProductItemAccordion/index.tsx +30 -5
  50. package/themes/business/src/components/ReviewCustomer/index.tsx +39 -15
  51. package/themes/business/src/components/shared/ODropDown.tsx +42 -8
  52. package/themes/business/src/components/shared/ODropDownCalendar.tsx +36 -7
  53. package/themes/business/src/components/shared/OLink.tsx +33 -13
  54. package/themes/business/src/components/shared/OText.tsx +8 -2
  55. package/themes/business/src/types/index.tsx +36 -3
  56. package/themes/business/src/utils/index.tsx +53 -0
  57. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  58. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  59. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  60. package/themes/kiosk/src/components/BusinessesListing/index.tsx +2 -1
  61. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  62. package/themes/kiosk/src/components/LoginForm/Otp/index.tsx +92 -0
  63. package/themes/kiosk/src/components/LoginForm/Otp/styles.tsx +7 -0
  64. package/themes/kiosk/src/components/LoginForm/index.tsx +476 -153
  65. package/themes/kiosk/src/components/LoginForm/styles.tsx +14 -1
  66. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  67. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  68. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  69. package/themes/kiosk/src/components/PhoneInputNumber/index.tsx +1 -0
  70. package/themes/kiosk/src/components/PhoneInputNumber/styles.tsx +1 -3
  71. package/themes/kiosk/src/components/ProductForm/index.tsx +1 -14
  72. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  73. package/themes/kiosk/src/components/shared/OModal.tsx +14 -11
  74. package/themes/kiosk/src/layouts/Container.tsx +7 -1
  75. package/themes/kiosk/src/types/index.d.ts +14 -0
  76. package/themes/kiosk/src/utils/index.tsx +15 -0
  77. package/themes/original/index.tsx +8 -0
  78. package/themes/original/src/components/AddressDetails/index.tsx +10 -8
  79. package/themes/original/src/components/AddressForm/index.tsx +155 -139
  80. package/themes/original/src/components/AddressList/index.tsx +18 -18
  81. package/themes/original/src/components/AddressList/styles.tsx +4 -2
  82. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  83. package/themes/original/src/components/BusinessBasicInformation/index.tsx +124 -78
  84. package/themes/original/src/components/BusinessController/index.tsx +101 -70
  85. package/themes/original/src/components/BusinessController/styles.tsx +14 -9
  86. package/themes/original/src/components/BusinessInformation/index.tsx +10 -31
  87. package/themes/original/src/components/BusinessItemAccordion/index.tsx +12 -6
  88. package/themes/original/src/components/BusinessListingSearch/BusinessControllerSkeletons/index.tsx +57 -0
  89. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/index.tsx +59 -0
  90. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/styles.tsx +13 -0
  91. package/themes/original/src/components/BusinessListingSearch/index.tsx +102 -155
  92. package/themes/original/src/components/BusinessListingSearch/styles.tsx +10 -12
  93. package/themes/original/src/components/BusinessProductsList/index.tsx +11 -8
  94. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  95. package/themes/original/src/components/BusinessProductsListing/index.tsx +562 -495
  96. package/themes/original/src/components/BusinessProductsListing/styles.tsx +13 -12
  97. package/themes/original/src/components/BusinessTypeFilter/index.tsx +3 -2
  98. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +2 -1
  99. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +116 -81
  100. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -9
  101. package/themes/original/src/components/BusinessesListing/index.tsx +6 -6
  102. package/themes/original/src/components/Cart/index.tsx +75 -41
  103. package/themes/original/src/components/CartContent/index.tsx +80 -18
  104. package/themes/original/src/components/CartContent/styles.tsx +11 -1
  105. package/themes/original/src/components/Checkout/index.tsx +101 -106
  106. package/themes/original/src/components/Checkout/styles.tsx +4 -2
  107. package/themes/original/src/components/CitiesControl/index.tsx +89 -0
  108. package/themes/original/src/components/CitiesControl/styles.tsx +17 -0
  109. package/themes/original/src/components/DriverTips/index.tsx +52 -37
  110. package/themes/original/src/components/DriverTips/styles.tsx +2 -1
  111. package/themes/original/src/components/Favorite/index.tsx +7 -4
  112. package/themes/original/src/components/Favorite/styles.tsx +1 -1
  113. package/themes/original/src/components/FavoriteList/index.tsx +70 -80
  114. package/themes/original/src/components/FloatingButton/index.tsx +1 -2
  115. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  116. package/themes/original/src/components/GPSButton/index.tsx +20 -19
  117. package/themes/original/src/components/GPSButton/styles.ts +3 -3
  118. package/themes/original/src/components/GoogleMap/index.tsx +10 -1
  119. package/themes/original/src/components/Help/index.tsx +8 -8
  120. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +14 -20
  121. package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +6 -0
  122. package/themes/original/src/components/HelpGuide/index.tsx +13 -12
  123. package/themes/original/src/components/HelpGuide/styles.tsx +6 -0
  124. package/themes/original/src/components/HelpOrder/index.tsx +12 -20
  125. package/themes/original/src/components/HelpOrder/styles.tsx +8 -1
  126. package/themes/original/src/components/LanguageSelector/index.tsx +19 -14
  127. package/themes/original/src/components/LastOrder/index.tsx +1 -34
  128. package/themes/original/src/components/LoginForm/Otp/index.tsx +89 -73
  129. package/themes/original/src/components/LoginForm/Otp/styles.tsx +0 -1
  130. package/themes/original/src/components/LoginForm/index.tsx +28 -8
  131. package/themes/original/src/components/LottieAnimation/index.tsx +78 -0
  132. package/themes/original/src/components/MessageListing/index.tsx +7 -40
  133. package/themes/original/src/components/Messages/index.tsx +42 -26
  134. package/themes/original/src/components/MomentOption/index.tsx +22 -14
  135. package/themes/original/src/components/MultiCart/index.tsx +50 -0
  136. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +92 -93
  137. package/themes/original/src/components/MultiCheckout/index.tsx +152 -77
  138. package/themes/original/src/components/MultiOrdersDetails/SingleOrderCard.tsx +37 -224
  139. package/themes/original/src/components/MultiOrdersDetails/index.tsx +85 -34
  140. package/themes/original/src/components/MultiOrdersDetails/styles.tsx +1 -1
  141. package/themes/original/src/components/MyOrders/index.tsx +66 -17
  142. package/themes/original/src/components/NavBar/index.tsx +7 -6
  143. package/themes/original/src/components/NetworkError/index.tsx +5 -3
  144. package/themes/original/src/components/NotFoundSource/index.tsx +2 -1
  145. package/themes/original/src/components/Notifications/index.tsx +144 -0
  146. package/themes/original/src/components/Notifications/styles.tsx +20 -0
  147. package/themes/original/src/components/OrderDetails/index.tsx +108 -218
  148. package/themes/original/src/components/OrderDetails/styles.tsx +10 -1
  149. package/themes/original/src/components/OrderItAgain/index.tsx +46 -43
  150. package/themes/original/src/components/OrderProgress/index.tsx +81 -105
  151. package/themes/original/src/components/OrderProgress/styles.tsx +5 -0
  152. package/themes/original/src/components/OrderSummary/index.tsx +2 -2
  153. package/themes/original/src/components/OrderTypeSelector/index.tsx +13 -6
  154. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +93 -97
  155. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +3 -0
  156. package/themes/original/src/components/OrdersOption/index.tsx +86 -92
  157. package/themes/original/src/components/PageBanner/index.tsx +146 -0
  158. package/themes/original/src/components/PageBanner/styles.tsx +11 -0
  159. package/themes/original/src/components/PaymentOptionStripe/styles.tsx +1 -1
  160. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  161. package/themes/original/src/components/PaymentOptions/index.tsx +1 -1
  162. package/themes/original/src/components/PhoneInputNumber/index.tsx +1 -1
  163. package/themes/original/src/components/PlaceSpot/index.tsx +16 -6
  164. package/themes/original/src/components/PreviousOrders/index.tsx +3 -2
  165. package/themes/original/src/components/ProductForm/index.tsx +240 -254
  166. package/themes/original/src/components/ProductForm/styles.tsx +5 -8
  167. package/themes/original/src/components/ProductItemAccordion/index.tsx +199 -128
  168. package/themes/original/src/components/ProductOptionSubOption/index.tsx +18 -10
  169. package/themes/original/src/components/ProductOptionSubOption/styles.tsx +1 -2
  170. package/themes/original/src/components/ProfessionalFilter/SingleProfessionalCard/index.tsx +108 -0
  171. package/themes/original/src/components/ProfessionalFilter/index.tsx +20 -49
  172. package/themes/original/src/components/ProfessionalProfile/index.tsx +54 -14
  173. package/themes/original/src/components/Promotions/index.tsx +234 -220
  174. package/themes/original/src/components/Promotions/styles.tsx +7 -2
  175. package/themes/original/src/components/ReviewDriver/index.tsx +3 -3
  176. package/themes/original/src/components/ReviewOrder/index.tsx +43 -11
  177. package/themes/original/src/components/ReviewOrder/styles.tsx +7 -0
  178. package/themes/original/src/components/ReviewProducts/index.tsx +8 -5
  179. package/themes/original/src/components/ReviewTrigger/index.tsx +27 -9
  180. package/themes/original/src/components/ReviewTrigger/styles.tsx +8 -1
  181. package/themes/original/src/components/ScheduleAccordion/index.tsx +68 -0
  182. package/themes/original/src/components/ScheduleAccordion/styles.tsx +14 -0
  183. package/themes/original/src/components/ServiceForm/index.tsx +377 -270
  184. package/themes/original/src/components/Sessions/index.tsx +11 -8
  185. package/themes/original/src/components/Sessions/styles.tsx +5 -0
  186. package/themes/original/src/components/SignupForm/index.tsx +78 -66
  187. package/themes/original/src/components/SingleOrderCard/index.tsx +125 -56
  188. package/themes/original/src/components/SingleOrderCard/styles.tsx +10 -8
  189. package/themes/original/src/components/SingleProductCard/index.tsx +112 -77
  190. package/themes/original/src/components/SingleProductCard/styles.tsx +14 -13
  191. package/themes/original/src/components/SingleProductReview/index.tsx +38 -5
  192. package/themes/original/src/components/SingleProductReview/styles.tsx +12 -0
  193. package/themes/original/src/components/StripeCardsList/index.tsx +1 -1
  194. package/themes/original/src/components/StripeElementsForm/index.tsx +4 -1
  195. package/themes/original/src/components/UpsellingProducts/index.tsx +244 -215
  196. package/themes/original/src/components/UpsellingProducts/styles.tsx +12 -1
  197. package/themes/original/src/components/UserDetails/index.tsx +5 -3
  198. package/themes/original/src/components/UserFormDetails/index.tsx +50 -54
  199. package/themes/original/src/components/UserProfile/index.tsx +58 -35
  200. package/themes/original/src/components/UserProfile/styles.ts +17 -0
  201. package/themes/original/src/components/UserProfileForm/index.tsx +21 -28
  202. package/themes/original/src/components/UserProfileForm/styles.tsx +7 -0
  203. package/themes/original/src/components/WalletTransactions/index.tsx +76 -0
  204. package/themes/original/src/components/WalletTransactions/styles.tsx +13 -0
  205. package/themes/original/src/components/Wallets/index.tsx +177 -164
  206. package/themes/original/src/components/Wallets/styles.tsx +12 -8
  207. package/themes/original/src/components/shared/CardAnimation.tsx +47 -0
  208. package/themes/original/src/components/shared/HeaderTitle.tsx +8 -3
  209. package/themes/original/src/components/shared/OBottomPopup.tsx +1 -1
  210. package/themes/original/src/components/shared/OButton.tsx +9 -4
  211. package/themes/original/src/components/shared/OIcon.tsx +8 -1
  212. package/themes/original/src/components/shared/OInput.tsx +10 -1
  213. package/themes/original/src/layouts/Container.tsx +13 -9
  214. package/themes/original/src/types/index.tsx +42 -7
  215. package/themes/original/src/utils/index.tsx +322 -58
  216. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -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,75 +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 = configs?.checkout_multi_business_enabled?.value === '1'
85
+ const isDisablePlaceOrderButton = !(paymethodSelected?.paymethod_id || paymethodSelected?.wallet_id) || (paymethodSelected?.paymethod?.gateway === 'stripe' && !paymethodSelected?.paymethod_data)
82
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 || []
83
90
 
84
- const [isUserDetailsEdit, setIsUserDetailsEdit] = useState(false);
85
- const [phoneUpdate, setPhoneUpdate] = useState(false);
86
- const [userErrors, setUserErrors] = useState<any>([]);
91
+ const [isUserDetailsEdit, setIsUserDetailsEdit] = useState(false);
92
+ const [phoneUpdate, setPhoneUpdate] = useState(false);
93
+ const [userErrors, setUserErrors] = useState<any>([]);
87
94
  const handleMomentClick = () => {
88
- if (isPreOrder) {
89
- navigation.navigate('MomentOption')
90
- }
91
- }
95
+ if (isPreOrder) {
96
+ navigation.navigate('MomentOption')
97
+ }
98
+ }
92
99
 
93
100
  const checkValidationFields = () => {
94
- setUserErrors([])
95
- const errors = []
96
- 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']
97
104
 
98
- Object.values(validationFields?.fields?.checkout).map((field: any) => {
99
- if (field?.required && !notFields.includes(field.code)) {
100
- if (!user[field?.code]) {
101
- errors.push(t(`VALIDATION_ERROR_${field.code.toUpperCase()}_REQUIRED`, `The field ${field?.name} is required`))
102
- }
103
- }
104
- })
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
+ })
105
112
 
106
- if (
107
- !user?.cellphone &&
108
- ((validationFields?.fields?.checkout?.cellphone?.enabled &&
109
- validationFields?.fields?.checkout?.cellphone?.required) ||
110
- configs?.verification_phone_required?.value === '1')
111
- ) {
112
- errors.push(t('VALIDATION_ERROR_MOBILE_PHONE_REQUIRED', 'The field Phone number is required'))
113
- }
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
+ }
114
121
 
115
- if (phoneUpdate) {
116
- errors.push(t('NECESSARY_UPDATE_COUNTRY_PHONE_CODE', 'It is necessary to update your phone number'))
117
- }
122
+ if (phoneUpdate) {
123
+ errors.push(t('NECESSARY_UPDATE_COUNTRY_PHONE_CODE', 'It is necessary to update your phone number'))
124
+ }
118
125
 
119
- setUserErrors(errors)
120
- }
126
+ setUserErrors(errors)
127
+ }
121
128
 
122
129
  const togglePhoneUpdate = (val: boolean) => {
123
- setPhoneUpdate(val)
124
- }
130
+ setPhoneUpdate(val)
131
+ }
125
132
 
126
133
  const handlePlaceOrder = () => {
127
134
  if (!userErrors.length) {
@@ -129,33 +136,30 @@ const MultiCheckoutUI = (props: any) => {
129
136
  return
130
137
  }
131
138
  let stringError = ''
132
- Object.values(userErrors).map((item: any, i: number) => {
133
- stringError += (i + 1) === userErrors.length ? `- ${item?.message || item}` : `- ${item?.message || item}\n`
134
- })
135
- 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)
136
143
  setIsUserDetailsEdit(true)
137
144
  }
138
145
 
139
146
  useEffect(() => {
140
- if (validationFields && validationFields?.fields?.checkout) {
141
- checkValidationFields()
142
- }
143
- }, [validationFields, user])
147
+ if (validationFields && validationFields?.fields?.checkout) {
148
+ checkValidationFields()
149
+ }
150
+ }, [validationFields, user])
144
151
 
145
152
  return (
146
153
  <>
147
154
  <Container noPadding>
148
155
  <View style={styles.wrapperNavbar}>
149
156
  <NavBar
150
- isVertical
151
157
  title={t('CHECKOUT', 'Checkout')}
152
158
  titleAlign={'center'}
153
159
  onActionLeft={() => navigation?.canGoBack() && navigation.goBack()}
154
160
  showCall={false}
161
+ paddingTop={Platform.OS === 'ios' ? 0 : 4}
155
162
  btnStyle={{ paddingLeft: 0 }}
156
- style={{ marginTop: Platform.OS === 'ios' ? 0 : 30 }}
157
- titleWrapStyle={{ paddingHorizontal: 0 }}
158
- titleStyle={{ marginRight: 0, marginLeft: 0 }}
159
163
  />
160
164
  </View>
161
165
  <ChContainer style={styles.pagePadding}>
@@ -225,10 +229,40 @@ const MultiCheckoutUI = (props: any) => {
225
229
  handleSelectPaymethod={handleSelectPaymethod}
226
230
  handleSelectWallet={handleSelectWallet}
227
231
  handlePaymethodDataChange={handlePaymethodDataChange}
232
+ cartUuid={cartUuid}
228
233
  />
229
234
  <View style={{ height: 8, backgroundColor: theme.colors.backgroundGray100, marginTop: 13, marginHorizontal: -40 }} />
230
235
  </ChSection>
231
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
+
232
266
  <ChSection>
233
267
  <ChCarts>
234
268
  <CartsHeader>
@@ -242,12 +276,14 @@ const MultiCheckoutUI = (props: any) => {
242
276
  cart={cart}
243
277
  cartuuid={cart.uuid}
244
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'}
245
281
  onNavigationRedirect={(route: string, params: any) => props.navigation.navigate(route, params)}
246
282
  />
247
283
  <View style={{ height: 8, backgroundColor: theme.colors.backgroundGray100, marginTop: 13, marginHorizontal: -40 }} />
248
284
  </React.Fragment>
249
285
  ))}
250
- {openCarts.length === 0 && (
286
+ {!cartGroup?.loading && openCarts.length === 0 && (
251
287
  <CCNotCarts>
252
288
  <OText size={24} style={{ textAlign: 'center' }}>
253
289
  {t('CARTS_NOT_FOUND', 'You don\'t have carts available')}
@@ -261,6 +297,25 @@ const MultiCheckoutUI = (props: any) => {
261
297
  )}
262
298
  {openCarts.length > 0 && (
263
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
+ )}
264
319
  <View style={{ flexDirection: 'row', justifyContent: 'space-between' }}>
265
320
  <OText size={16} lineHeight={24} color={theme.colors.textNormal} weight={'500'}>
266
321
  {t('TOTAL_FOR_ALL_CARTS', 'Total for all Carts')}
@@ -272,23 +327,18 @@ const MultiCheckoutUI = (props: any) => {
272
327
  </OText>
273
328
  </ChCartsTotal>
274
329
  )}
275
- {openCarts.length > maximumCarts && (
276
- <OText size={14} color={theme.colors.danger5} style={{ marginVertical: 20 }}>
277
- {t('WARNING_MAXIMUM_CARTS', 'You can only pay for a maximum of 5 carts, please discard one or more to continue.')}
278
- </OText>
279
- )}
280
330
  </ChCarts>
281
331
  </ChSection>
282
332
  </ChContainer>
283
333
  </Container>
284
-
334
+
285
335
  <FloatingButton
286
- handleClick={() => handlePlaceOrder()}
336
+ handleClick={() => handlePlaceOrder()}
287
337
  isSecondaryBtn={isDisablePlaceOrderButton}
288
338
  disabled={isDisablePlaceOrderButton}
289
339
  btnText={placing ? t('PLACING', 'Placing') : t('PLACE_ORDER', 'Place Order')}
290
340
  btnRightValueShow
291
- btnRightValue={parsePrice(totalCartsPrice)}
341
+ btnRightValue={parsePrice(totalCartsPrice)}
292
342
  iosBottom={30}
293
343
  />
294
344
  </>
@@ -296,9 +346,34 @@ const MultiCheckoutUI = (props: any) => {
296
346
  }
297
347
 
298
348
  export const MultiCheckout = (props: any) => {
349
+ const [loadMultiCarts, setLoadMultiCarts] = useState(!!props.route?.params?.checkCarts)
350
+ const [cartUuid, setCartUuid] = useState('')
351
+
299
352
  const multiCheckoutProps = {
300
353
  ...props,
354
+ cartUuid: props.route?.params?.cartUuid ?? cartUuid,
301
355
  UIComponent: MultiCheckoutUI
302
356
  }
303
- 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
+ )
304
379
  }