ordering-ui-react-native 0.17.4 → 0.17.5-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 (213) hide show
  1. package/package.json +5 -5
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/BusinessInformation/index.tsx +11 -4
  4. package/src/components/BusinessInformation/styles.tsx +2 -2
  5. package/src/components/BusinessesListing/index.tsx +1 -1
  6. package/src/components/OrderCreating/index.tsx +1 -21
  7. package/src/components/PaymentOptionsWebView/index.tsx +119 -120
  8. package/src/components/SingleProductReview/index.tsx +7 -4
  9. package/src/components/StripeMethodForm/index.tsx +6 -14
  10. package/src/components/VerifyPhone/styles.tsx +1 -2
  11. package/src/components/shared/OToast.tsx +4 -4
  12. package/src/utils/index.tsx +7 -1
  13. package/themes/business/index.tsx +2 -0
  14. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +265 -240
  15. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +6 -4
  16. package/themes/business/src/components/BusinessController/index.tsx +0 -1
  17. package/themes/business/src/components/Chat/index.tsx +118 -107
  18. package/themes/business/src/components/DriverMap/index.tsx +22 -9
  19. package/themes/business/src/components/GoogleMap/index.tsx +58 -57
  20. package/themes/business/src/components/LoginForm/Otp/index.tsx +120 -0
  21. package/themes/business/src/components/LoginForm/Otp/styles.tsx +7 -0
  22. package/themes/business/src/components/LoginForm/index.tsx +238 -80
  23. package/themes/business/src/components/LoginForm/styles.tsx +10 -0
  24. package/themes/business/src/components/MapView/index.tsx +18 -7
  25. package/themes/business/src/components/NewOrderNotification/index.tsx +43 -50
  26. package/themes/business/src/components/OrderDetails/Delivery.tsx +4 -3
  27. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +96 -50
  28. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +59 -62
  29. package/themes/business/src/components/OrderDetailsLogistic/index.tsx +195 -0
  30. package/themes/business/src/components/OrderDetailsLogistic/styles.tsx +5 -0
  31. package/themes/business/src/components/OrderMessage/index.tsx +18 -17
  32. package/themes/business/src/components/OrderSummary/index.tsx +113 -121
  33. package/themes/business/src/components/OrdersOption/index.tsx +32 -75
  34. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +250 -0
  35. package/themes/business/src/components/PreviousOrders/OrdersGroupedItem.tsx +115 -0
  36. package/themes/business/src/components/PreviousOrders/index.tsx +445 -243
  37. package/themes/business/src/components/PreviousOrders/styles.tsx +31 -3
  38. package/themes/business/src/components/ProductItemAccordion/index.tsx +27 -3
  39. package/themes/business/src/components/ReviewCustomer/index.tsx +41 -24
  40. package/themes/business/src/components/StoresList/index.tsx +2 -2
  41. package/themes/business/src/components/shared/OLink.tsx +33 -13
  42. package/themes/business/src/components/shared/OModal.tsx +16 -9
  43. package/themes/business/src/components/shared/OText.tsx +8 -2
  44. package/themes/business/src/types/index.tsx +33 -2
  45. package/themes/business/src/utils/index.tsx +51 -0
  46. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  47. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  48. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  49. package/themes/kiosk/src/components/BusinessesListing/index.tsx +2 -1
  50. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  51. package/themes/kiosk/src/components/LoginForm/Otp/index.tsx +92 -0
  52. package/themes/kiosk/src/components/LoginForm/Otp/styles.tsx +7 -0
  53. package/themes/kiosk/src/components/LoginForm/index.tsx +473 -151
  54. package/themes/kiosk/src/components/LoginForm/styles.tsx +14 -1
  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/PhoneInputNumber/index.tsx +3 -2
  59. package/themes/kiosk/src/components/PhoneInputNumber/styles.tsx +1 -3
  60. package/themes/kiosk/src/components/ProductForm/index.tsx +1 -14
  61. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  62. package/themes/kiosk/src/components/shared/OModal.tsx +14 -11
  63. package/themes/kiosk/src/layouts/Container.tsx +7 -1
  64. package/themes/kiosk/src/types/index.d.ts +13 -0
  65. package/themes/kiosk/src/utils/index.tsx +15 -0
  66. package/themes/original/index.tsx +8 -0
  67. package/themes/original/src/components/AddressDetails/index.tsx +29 -11
  68. package/themes/original/src/components/AddressForm/index.tsx +41 -16
  69. package/themes/original/src/components/AddressList/index.tsx +26 -21
  70. package/themes/original/src/components/AddressList/styles.tsx +4 -2
  71. package/themes/original/src/components/AnalyticsSegment/index.tsx +189 -9
  72. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  73. package/themes/original/src/components/BusinessBasicInformation/index.tsx +125 -82
  74. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +9 -4
  75. package/themes/original/src/components/BusinessController/index.tsx +145 -68
  76. package/themes/original/src/components/BusinessController/styles.tsx +22 -9
  77. package/themes/original/src/components/BusinessFeaturedController/index.tsx +21 -54
  78. package/themes/original/src/components/BusinessFeaturedController/styles.tsx +8 -0
  79. package/themes/original/src/components/BusinessInformation/index.tsx +10 -31
  80. package/themes/original/src/components/BusinessItemAccordion/index.tsx +24 -23
  81. package/themes/original/src/components/BusinessListingSearch/index.tsx +52 -24
  82. package/themes/original/src/components/BusinessPreorder/index.tsx +97 -16
  83. package/themes/original/src/components/BusinessProductsList/index.tsx +20 -11
  84. package/themes/original/src/components/BusinessProductsList/styles.tsx +8 -3
  85. package/themes/original/src/components/BusinessProductsListing/index.tsx +617 -490
  86. package/themes/original/src/components/BusinessProductsListing/styles.tsx +7 -13
  87. package/themes/original/src/components/BusinessReviews/index.tsx +3 -1
  88. package/themes/original/src/components/BusinessTypeFilter/index.tsx +3 -3
  89. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +1 -1
  90. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +98 -78
  91. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -9
  92. package/themes/original/src/components/BusinessesListing/index.tsx +5 -3
  93. package/themes/original/src/components/Cart/index.tsx +88 -43
  94. package/themes/original/src/components/CartContent/index.tsx +102 -3
  95. package/themes/original/src/components/CartContent/styles.tsx +15 -1
  96. package/themes/original/src/components/Checkout/index.tsx +311 -178
  97. package/themes/original/src/components/Checkout/styles.tsx +4 -2
  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/CouponControl/index.tsx +10 -3
  101. package/themes/original/src/components/DriverTips/index.tsx +52 -37
  102. package/themes/original/src/components/DriverTips/styles.tsx +2 -1
  103. package/themes/original/src/components/Favorite/index.tsx +7 -4
  104. package/themes/original/src/components/Favorite/styles.tsx +1 -1
  105. package/themes/original/src/components/FavoriteList/index.tsx +70 -80
  106. package/themes/original/src/components/FloatingButton/index.tsx +1 -2
  107. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  108. package/themes/original/src/components/GPSButton/styles.ts +3 -3
  109. package/themes/original/src/components/GiftCard/GiftCardUI/index.tsx +96 -0
  110. package/themes/original/src/components/GiftCard/GiftCardUI/styles.tsx +5 -0
  111. package/themes/original/src/components/GiftCard/PurchaseGiftCard/index.tsx +100 -0
  112. package/themes/original/src/components/GiftCard/PurchaseGiftCard/styles.tsx +8 -0
  113. package/themes/original/src/components/GiftCard/RedeemGiftCard/index.tsx +178 -0
  114. package/themes/original/src/components/GiftCard/RedeemGiftCard/styles.tsx +8 -0
  115. package/themes/original/src/components/GiftCard/SendGiftCard/index.tsx +165 -0
  116. package/themes/original/src/components/GiftCard/SendGiftCard/styles.tsx +9 -0
  117. package/themes/original/src/components/Help/index.tsx +8 -8
  118. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +11 -22
  119. package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +6 -0
  120. package/themes/original/src/components/HelpGuide/index.tsx +12 -16
  121. package/themes/original/src/components/HelpGuide/styles.tsx +6 -0
  122. package/themes/original/src/components/HelpOrder/index.tsx +12 -25
  123. package/themes/original/src/components/HelpOrder/styles.tsx +8 -1
  124. package/themes/original/src/components/Home/index.tsx +13 -4
  125. package/themes/original/src/components/LanguageSelector/index.tsx +19 -14
  126. package/themes/original/src/components/LastOrder/index.tsx +1 -34
  127. package/themes/original/src/components/LoginForm/Otp/index.tsx +89 -73
  128. package/themes/original/src/components/LoginForm/Otp/styles.tsx +0 -1
  129. package/themes/original/src/components/LoginForm/index.tsx +43 -19
  130. package/themes/original/src/components/LottieAnimation/index.tsx +78 -0
  131. package/themes/original/src/components/MessageListing/index.tsx +16 -42
  132. package/themes/original/src/components/Messages/index.tsx +32 -10
  133. package/themes/original/src/components/MomentOption/index.tsx +195 -88
  134. package/themes/original/src/components/MultiCart/index.tsx +50 -0
  135. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +117 -96
  136. package/themes/original/src/components/MultiCheckout/index.tsx +248 -83
  137. package/themes/original/src/components/MultiOrdersDetails/SingleOrderCard.tsx +37 -224
  138. package/themes/original/src/components/MultiOrdersDetails/index.tsx +67 -20
  139. package/themes/original/src/components/MultiOrdersDetails/styles.tsx +1 -1
  140. package/themes/original/src/components/MyOrders/index.tsx +66 -17
  141. package/themes/original/src/components/NavBar/index.tsx +6 -11
  142. package/themes/original/src/components/Notifications/index.tsx +144 -0
  143. package/themes/original/src/components/Notifications/styles.tsx +20 -0
  144. package/themes/original/src/components/OrderDetails/OrderEta.tsx +61 -0
  145. package/themes/original/src/components/OrderDetails/index.tsx +262 -347
  146. package/themes/original/src/components/OrderDetails/styles.tsx +10 -1
  147. package/themes/original/src/components/OrderItAgain/index.tsx +47 -43
  148. package/themes/original/src/components/OrderProgress/index.tsx +74 -112
  149. package/themes/original/src/components/OrderProgress/styles.tsx +5 -0
  150. package/themes/original/src/components/OrderSummary/index.tsx +68 -29
  151. package/themes/original/src/components/OrderTypeSelector/index.tsx +4 -3
  152. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +28 -19
  153. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +3 -0
  154. package/themes/original/src/components/OrdersOption/index.tsx +101 -89
  155. package/themes/original/src/components/PageBanner/index.tsx +171 -0
  156. package/themes/original/src/components/PageBanner/styles.tsx +11 -0
  157. package/themes/original/src/components/PaymentOptionStripe/styles.tsx +1 -1
  158. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  159. package/themes/original/src/components/PaymentOptions/index.tsx +3 -3
  160. package/themes/original/src/components/PhoneInputNumber/index.tsx +3 -3
  161. package/themes/original/src/components/PlaceSpot/index.tsx +12 -6
  162. package/themes/original/src/components/PreviousOrders/index.tsx +3 -2
  163. package/themes/original/src/components/ProductForm/index.tsx +240 -261
  164. package/themes/original/src/components/ProductForm/styles.tsx +4 -7
  165. package/themes/original/src/components/ProductItemAccordion/index.tsx +200 -128
  166. package/themes/original/src/components/ProductOptionSubOption/index.tsx +18 -10
  167. package/themes/original/src/components/ProductOptionSubOption/styles.tsx +1 -2
  168. package/themes/original/src/components/ProfessionalFilter/SingleProfessionalCard/index.tsx +108 -0
  169. package/themes/original/src/components/ProfessionalFilter/index.tsx +20 -49
  170. package/themes/original/src/components/ProfessionalProfile/index.tsx +54 -14
  171. package/themes/original/src/components/Promotions/index.tsx +234 -220
  172. package/themes/original/src/components/Promotions/styles.tsx +10 -3
  173. package/themes/original/src/components/ReviewDriver/index.tsx +3 -3
  174. package/themes/original/src/components/ReviewOrder/index.tsx +26 -9
  175. package/themes/original/src/components/ReviewOrder/styles.tsx +7 -0
  176. package/themes/original/src/components/ReviewProducts/index.tsx +7 -4
  177. package/themes/original/src/components/ReviewTrigger/index.tsx +27 -9
  178. package/themes/original/src/components/ReviewTrigger/styles.tsx +8 -1
  179. package/themes/original/src/components/ScheduleAccordion/index.tsx +68 -0
  180. package/themes/original/src/components/ScheduleAccordion/styles.tsx +14 -0
  181. package/themes/original/src/components/ServiceForm/index.tsx +377 -270
  182. package/themes/original/src/components/Sessions/index.tsx +11 -8
  183. package/themes/original/src/components/Sessions/styles.tsx +5 -0
  184. package/themes/original/src/components/SignupForm/index.tsx +79 -66
  185. package/themes/original/src/components/SingleOrderCard/index.tsx +148 -62
  186. package/themes/original/src/components/SingleOrderCard/styles.tsx +11 -9
  187. package/themes/original/src/components/SingleProductCard/index.tsx +111 -56
  188. package/themes/original/src/components/SingleProductCard/styles.tsx +27 -13
  189. package/themes/original/src/components/SingleProductReview/index.tsx +38 -5
  190. package/themes/original/src/components/SingleProductReview/styles.tsx +12 -0
  191. package/themes/original/src/components/StripeCardsList/index.tsx +1 -1
  192. package/themes/original/src/components/StripeElementsForm/index.tsx +4 -1
  193. package/themes/original/src/components/UpsellingProducts/index.tsx +238 -218
  194. package/themes/original/src/components/UpsellingProducts/styles.tsx +12 -1
  195. package/themes/original/src/components/UserDetails/index.tsx +8 -4
  196. package/themes/original/src/components/UserFormDetails/index.tsx +53 -54
  197. package/themes/original/src/components/UserProfile/index.tsx +58 -35
  198. package/themes/original/src/components/UserProfile/styles.ts +17 -0
  199. package/themes/original/src/components/UserProfileForm/index.tsx +21 -28
  200. package/themes/original/src/components/UserProfileForm/styles.tsx +7 -0
  201. package/themes/original/src/components/Wallets/index.tsx +31 -17
  202. package/themes/original/src/components/Wallets/styles.tsx +2 -0
  203. package/themes/original/src/components/shared/CardAnimation.tsx +47 -0
  204. package/themes/original/src/components/shared/HeaderTitle.tsx +8 -3
  205. package/themes/original/src/components/shared/OBottomPopup.tsx +1 -1
  206. package/themes/original/src/components/shared/OButton.tsx +6 -2
  207. package/themes/original/src/components/shared/OIcon.tsx +8 -1
  208. package/themes/original/src/components/shared/OInput.tsx +10 -1
  209. package/themes/original/src/components/shared/OModal.tsx +3 -3
  210. package/themes/original/src/layouts/Container.tsx +13 -9
  211. package/themes/original/src/types/index.tsx +47 -9
  212. package/themes/original/src/utils/index.tsx +364 -58
  213. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -8,7 +8,7 @@ import {
8
8
  useValidationFields,
9
9
  } from 'ordering-components/native';
10
10
  import { useTheme } from 'styled-components/native';
11
- import { CContainer, CheckoutAction, Divider, DriverTipsContainer } from './styles';
11
+ import { CContainer, CheckoutAction, DriverTipsContainer } from './styles';
12
12
 
13
13
  import { OSBill, OSTable, OSCoupon, OSTotal, OSRow } from '../OrderSummary/styles';
14
14
 
@@ -41,7 +41,17 @@ const CartUI = (props: any) => {
41
41
  commentState,
42
42
  onNavigationRedirect,
43
43
  handleRemoveOfferClick,
44
- isMultiCheckout
44
+ isMultiCheckout,
45
+ hideDeliveryFee,
46
+ hideDriverTip,
47
+ hideCouponInput,
48
+ preorderSlotInterval,
49
+ preorderLeadTime,
50
+ preorderTimeRange,
51
+ preorderMaximumDays,
52
+ preorderMinimumDays,
53
+ cateringTypes,
54
+ isFromUpselling
45
55
  } = props
46
56
 
47
57
  const theme = useTheme();
@@ -61,13 +71,12 @@ const CartUI = (props: any) => {
61
71
 
62
72
  const isCartPending = cart?.status === 2
63
73
  const isCouponEnabled = validationFields?.fields?.checkout?.coupon?.enabled
64
- const isCheckoutMultiBusinessEnabled: Boolean = configs?.checkout_multi_business_enabled?.value === '1'
65
- const openCarts = (Object.values(orderState?.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) || []
66
-
67
74
  const business: any = (orderState?.carts && Object.values(orderState.carts).find((_cart: any) => _cart?.uuid === props.cartuuid)) ?? {}
68
75
  const businessId = business?.business_id ?? null
69
76
  const placeSpotTypes = [4]
70
-
77
+ const isChewLayout = theme?.header?.components?.layout?.type?.toLowerCase() === 'chew'
78
+ const hideCartComments = theme?.business_view?.components?.cart?.components?.comments?.hidden
79
+ const hideCartDiscount = theme?.business_view?.components?.cart?.components?.discount?.hidden
71
80
  const driverTipsOptions = typeof configs?.driver_tip_options?.value === 'string'
72
81
  ? JSON.parse(configs?.driver_tip_options?.value) || []
73
82
  : configs?.driver_tip_options?.value || []
@@ -101,21 +110,45 @@ const CartUI = (props: any) => {
101
110
  }
102
111
  }
103
112
 
104
- const handleUpsellingPage = () => {
113
+ const handleUpsellingPage = (individualCart : any) => {
114
+ const isProductCartParam = !!individualCart?.products?.length
105
115
  setOpenUpselling(false)
106
116
  setCanOpenUpselling(false)
107
- if (isCheckoutMultiBusinessEnabled && openCarts.length > 1) {
108
- props.onNavigationRedirect('CheckoutNavigator', {
109
- screen: 'MultiCheckout'
110
- })
111
- } else {
112
- props.onNavigationRedirect('CheckoutNavigator', {
117
+
118
+ const cartsAvailable: any = Object.values(orderState?.carts)
119
+ ?.filter((_cart: any) => _cart?.valid && _cart?.status !== 2 && _cart?.products?.length)
120
+ ?.filter((_c: any) => !isProductCartParam ? _c.uuid !== individualCart?.uuid : _c)
121
+ if (cartsAvailable.length === 1 || !isMultiCheckout) {
122
+ const cart = isMultiCheckout ? cartsAvailable[0] : individualCart
123
+ onNavigationRedirect('CheckoutNavigator', {
113
124
  screen: 'CheckoutPage',
114
125
  cartUuid: cart?.uuid,
115
126
  businessLogo: cart?.business?.logo,
116
127
  businessName: cart?.business?.name,
117
128
  cartTotal: cart?.total
129
+ }, true)
130
+ } else {
131
+ const groupKeys: any = {}
132
+ cartsAvailable.forEach((_cart: any) => {
133
+ groupKeys[_cart?.group?.uuid]
134
+ ? groupKeys[_cart?.group?.uuid] += 1
135
+ : groupKeys[_cart?.group?.uuid ?? 'null'] = 1
118
136
  })
137
+
138
+ if (
139
+ (Object.keys(groupKeys).length === 1 && Object.keys(groupKeys)[0] === 'null') ||
140
+ Object.keys(groupKeys).length > 1
141
+ ) {
142
+ onNavigationRedirect('CheckoutNavigator', {
143
+ screen: 'MultiCheckout',
144
+ checkCarts: true
145
+ }, true)
146
+ } else {
147
+ onNavigationRedirect('CheckoutNavigator', {
148
+ screen: 'MultiCheckout',
149
+ cartUuid: cartsAvailable[0]?.group?.uuid
150
+ }, true)
151
+ }
119
152
  }
120
153
  }
121
154
 
@@ -154,6 +187,12 @@ const CartUI = (props: any) => {
154
187
  }
155
188
  }
156
189
 
190
+ const subtotalWithTaxes = cart?.taxes?.reduce((acc: any, item: any) => {
191
+ if (item?.type === 1)
192
+ return acc = acc + item?.summary?.tax
193
+ return acc = acc
194
+ }, cart?.subtotal)
195
+
157
196
  return (
158
197
  <CContainer>
159
198
  {openUpselling && (
@@ -178,14 +217,16 @@ const CartUI = (props: any) => {
178
217
  onNavigationRedirect={props.onNavigationRedirect}
179
218
  handleChangeStore={() => setOpenChangeStore(true)}
180
219
  handleClickCheckout={() => setOpenUpselling(true)}
181
- checkoutButtonDisabled={(openUpselling && !canOpenUpselling) || cart?.subtotal < cart?.minimum || !cart?.valid_address}
220
+ checkoutButtonDisabled={(openUpselling && !canOpenUpselling) || subtotalWithTaxes < cart?.minimum || !cart?.valid_address}
182
221
  isMultiCheckout={isMultiCheckout}
222
+ isFromUpselling={isFromUpselling}
183
223
  >
184
224
  {cart?.products?.length > 0 && cart?.products.map((product: any, i: number) => (
185
225
  <ProductItemAccordion
186
226
  key={`${product.code}_${i}`}
187
227
  isCartPending={isCartPending}
188
228
  isCartProduct
229
+ isDisabledEdit={!cart?.business_id}
189
230
  product={product}
190
231
  changeQuantity={changeQuantity}
191
232
  getProductMax={getProductMax}
@@ -291,9 +332,11 @@ const CartUI = (props: any) => {
291
332
  <TouchableOpacity style={{ marginLeft: 3 }} onPress={() => setOpenTaxModal({ open: true, data: offer, type: 'offer_target_3' })}>
292
333
  <AntIcon name='infocirlceo' size={16} color={theme.colors.primary} />
293
334
  </TouchableOpacity>
294
- <TouchableOpacity style={{ marginLeft: 3 }} onPress={() => onRemoveOffer(offer?.id)}>
295
- <AntIcon name='closecircle' size={16} color={theme.colors.primary} />
296
- </TouchableOpacity>
335
+ {!offer?.type && (
336
+ <TouchableOpacity style={{ marginLeft: 3 }} onPress={() => onRemoveOffer(offer?.id)}>
337
+ <AntIcon name='closecircle' size={16} color={theme.colors.primary} />
338
+ </TouchableOpacity>
339
+ )}
297
340
  </OSRow>
298
341
  <OText size={12} lineHeight={18}>
299
342
  - {parsePrice(offer?.summary?.discount)}
@@ -301,10 +344,10 @@ const CartUI = (props: any) => {
301
344
  </OSTable>
302
345
  ))
303
346
  }
304
- {orderState?.options?.type === 1 && cart?.delivery_price > 0 && (
347
+ {orderState?.options?.type === 1 && cart?.delivery_price_with_discount > 0 && !hideDeliveryFee && (
305
348
  <OSTable>
306
349
  <OText size={12} lineHeight={18}>{t('DELIVERY_FEE', 'Delivery Fee')}</OText>
307
- <OText size={12} lineHeight={18}>{parsePrice(cart?.delivery_price)}</OText>
350
+ <OText size={12} lineHeight={18}>{parsePrice(cart?.delivery_price_with_discount)}</OText>
308
351
  </OSTable>
309
352
  )}
310
353
  {
@@ -328,7 +371,7 @@ const CartUI = (props: any) => {
328
371
  </OSTable>
329
372
  ))
330
373
  }
331
- {cart?.driver_tip > 0 && (
374
+ {cart?.driver_tip > 0 && !hideDriverTip && (
332
375
  <OSTable>
333
376
  <OText size={12} lineHeight={18}>
334
377
  {t('DRIVER_TIP', 'Driver tip')}
@@ -350,18 +393,19 @@ const CartUI = (props: any) => {
350
393
  <OText size={12}>-{parsePrice(event.amount, { isTruncable: true })}</OText>
351
394
  </OSTable>
352
395
  ))}
353
- {isCouponEnabled && !isCartPending && (
396
+ {isCouponEnabled && !isCartPending && !hideCouponInput && (
354
397
  <OSTable>
355
398
  <OSCoupon>
356
399
  <CouponControl
357
400
  businessId={businessId}
358
401
  price={cart.total}
402
+ cart={cart}
359
403
  />
360
404
  </OSCoupon>
361
405
  </OSTable>
362
406
  )}
363
407
 
364
- {isMultiCheckout &&
408
+ {!isMultiCheckout &&
365
409
  cart &&
366
410
  cart?.valid &&
367
411
  orderState?.options?.type === 1 &&
@@ -369,30 +413,31 @@ const CartUI = (props: any) => {
369
413
  validationFields?.fields?.checkout?.driver_tip?.enabled &&
370
414
  driverTipsOptions && driverTipsOptions?.length > 0 &&
371
415
  (
372
- <DriverTipsContainer>
373
- <OText size={14} lineHeight={20} color={theme.colors.textNormal}>
374
- {t('DRIVER_TIPS', 'Driver Tips')}
375
- </OText>
376
- <DriverTips
377
- uuid={cart?.uuid}
378
- businessId={cart?.business_id}
379
- driverTipsOptions={driverTipsOptions}
380
- isFixedPrice={parseInt(configs?.driver_tip_type?.value, 10) === 1 || !!parseInt(configs?.driver_tip_use_custom?.value, 10)}
381
- isDriverTipUseCustom={!!parseInt(configs?.driver_tip_use_custom?.value, 10)}
382
- driverTip={parseInt(configs?.driver_tip_type?.value, 10) === 1 || !!parseInt(configs?.driver_tip_use_custom?.value, 10)
383
- ? cart?.driver_tip
384
- : cart?.driver_tip_rate}
385
- useOrderContext
386
- />
387
- </DriverTipsContainer>
416
+ <DriverTipsContainer>
417
+ <OText size={14} lineHeight={20} color={theme.colors.textNormal}>
418
+ {t('DRIVER_TIPS', 'Driver Tips')}
419
+ </OText>
420
+ <DriverTips
421
+ uuid={cart?.uuid}
422
+ businessId={cart?.business_id}
423
+ driverTipsOptions={!driverTipsOptions.includes(0) ? [0, ...driverTipsOptions] : driverTipsOptions}
424
+ isFixedPrice={parseInt(configs?.driver_tip_type?.value, 10) === 1}
425
+ isDriverTipUseCustom={!!parseInt(configs?.driver_tip_use_custom?.value, 10)}
426
+ driverTip={parseInt(configs?.driver_tip_type?.value, 10) === 1
427
+ ? cart?.driver_tip
428
+ : cart?.driver_tip_rate}
429
+ useOrderContext
430
+ cart={cart}
431
+ />
432
+ </DriverTipsContainer>
388
433
  )}
389
434
 
390
435
  <OSTotal>
391
436
  <OSTable style={{ marginTop: 15 }}>
392
- <OText size={14} lineHeight={21} weight={'600'}>
437
+ <OText size={14} lineHeight={21} weight={'bold'} color={theme.colors.textNormal}>
393
438
  {t('TOTAL', 'Total')}
394
439
  </OText>
395
- <OText size={14} lineHeight={21} weight={'600'}>
440
+ <OText size={14} lineHeight={21} weight={'bold'} color={theme.colors.textNormal}>
396
441
  {parsePrice(cart?.balance >= 0 ? cart?.balance : 0)}
397
442
  </OText>
398
443
  </OSTable>
@@ -455,15 +500,15 @@ const CartUI = (props: any) => {
455
500
  {cart?.valid_products ? (
456
501
  <CheckoutAction>
457
502
  <OButton
458
- text={(cart?.subtotal >= cart?.minimum || !cart?.minimum) && cart?.valid_address ? (
503
+ text={(subtotalWithTaxes >= cart?.minimum || !cart?.minimum) && cart?.valid_address ? (
459
504
  !openUpselling !== canOpenUpselling ? t('CHECKOUT', 'Checkout') : t('LOADING', 'Loading')
460
505
  ) : !cart?.valid_address ? (
461
506
  `${t('OUT_OF_COVERAGE', 'Out of Coverage')}`
462
507
  ) : (
463
508
  `${t('MINIMUN_SUBTOTAL_ORDER', 'Minimum subtotal order:')} ${parsePrice(cart?.minimum)}`
464
509
  )}
465
- bgColor={(cart?.subtotal < cart?.minimum || !cart?.valid_address) ? theme.colors.secundary : theme.colors.primary}
466
- isDisabled={(openUpselling && !canOpenUpselling) || cart?.subtotal < cart?.minimum || !cart?.valid_address}
510
+ bgColor={(subtotalWithTaxes < cart?.minimum || !cart?.valid_address) ? theme.colors.secundary : theme.colors.primary}
511
+ isDisabled={(openUpselling && !canOpenUpselling) || subtotalWithTaxes < cart?.minimum || !cart?.valid_address}
467
512
  borderColor={theme.colors.primary}
468
513
  imgRightSrc={null}
469
514
  textStyle={{ color: 'white', textAlign: 'center', flex: 1 }}
@@ -1,8 +1,8 @@
1
1
  import React, { useState } from 'react';
2
2
  import { View } from 'react-native';
3
- import { useLanguage } from 'ordering-components/native';
3
+ import { useLanguage, useConfig, useUtils } from 'ordering-components/native';
4
4
  import { useTheme } from 'styled-components/native';
5
- import { CCContainer, CCNotCarts, CCList } from './styles';
5
+ import { CCContainer, CCNotCarts, CCList, CheckoutAction, ChCartsTotal } from './styles';
6
6
 
7
7
  import { Cart } from '../Cart';
8
8
  import { OButton, OText } from '../shared';
@@ -17,10 +17,57 @@ export const CartContent = (props: any) => {
17
17
 
18
18
  const theme = useTheme();
19
19
  const [, t] = useLanguage()
20
+ const [{ configs }] = useConfig()
21
+ const [{ parsePrice }] = useUtils();
20
22
  const [isCartsLoading, setIsCartsLoading] = useState(false)
21
23
 
24
+ const isChewLayout = theme?.header?.components?.layout?.type === 'chew'
25
+ const isMultiCheckout = configs?.checkout_multi_business_enabled?.value === '1'
26
+ const cartsAvailable: any = Object.values(carts)?.filter((cart: any) => cart?.valid && cart?.status !== 2)
27
+
28
+ const totalCartsPrice = cartsAvailable?.length && cartsAvailable.reduce((total: any, cart: any) => { return total + cart?.total }, 0)
29
+ const totalCartsFee = cartsAvailable?.length && cartsAvailable
30
+ ?.filter((cart: any) => cart?.status !== 1 && cart?.valid && cart?.products?.length)
31
+ ?.reduce((total: any, cart: any) => { return total + (cart?.delivery_price_with_discount) }, 0)
32
+
33
+ const handleCheckoutRedirect = () => {
34
+ if (cartsAvailable.length === 1) {
35
+ onNavigationRedirect('CheckoutNavigator', {
36
+ screen: 'CheckoutPage',
37
+ cartUuid: cartsAvailable[0]?.uuid,
38
+ businessLogo: cartsAvailable[0]?.business?.logo,
39
+ businessName: cartsAvailable[0]?.business?.name,
40
+ cartTotal: cartsAvailable[0]?.total
41
+ })
42
+ } else {
43
+ const groupKeys: any = {}
44
+ cartsAvailable.forEach((_cart: any) => {
45
+ groupKeys[_cart?.group?.uuid]
46
+ ? groupKeys[_cart?.group?.uuid] += 1
47
+ : groupKeys[_cart?.group?.uuid ?? 'null'] = 1
48
+ })
49
+
50
+ if (
51
+ (Object.keys(groupKeys).length === 1 && Object.keys(groupKeys)[0] === 'null') ||
52
+ Object.keys(groupKeys).length > 1
53
+ ) {
54
+ onNavigationRedirect('CheckoutNavigator', {
55
+ screen: 'MultiCheckout',
56
+ checkCarts: true
57
+ })
58
+ } else {
59
+ onNavigationRedirect('CheckoutNavigator', {
60
+ screen: 'MultiCheckout',
61
+ cartUuid: cartsAvailable[0]?.group?.uuid
62
+ })
63
+ }
64
+ }
65
+ }
66
+
22
67
  return (
23
- <CCContainer>
68
+ <CCContainer
69
+ style={{ paddingHorizontal: isChewLayout ? 20 : 40 }}
70
+ >
24
71
  {isOrderStateCarts && carts?.length > 0 && (
25
72
  <>
26
73
  {carts.map((cart: any, i: number) => (
@@ -35,13 +82,65 @@ export const CartContent = (props: any) => {
35
82
  onNavigationRedirect={props.onNavigationRedirect}
36
83
  isCartsLoading={isCartsLoading}
37
84
  setIsCartsLoading={setIsCartsLoading}
85
+ isMultiCheckout={isMultiCheckout}
38
86
  hideUpselling
87
+ businessConfigs={cart?.business?.configs}
88
+ hideCouponInput={configs?.multi_business_checkout_coupon_input_style?.value === 'group'}
89
+ hideDeliveryFee={configs?.multi_business_checkout_show_combined_delivery_fee?.value === '1'}
90
+ hideDriverTip={configs?.multi_business_checkout_show_combined_driver_tip?.value === '1'}
39
91
  />
40
92
  <View style={{ height: 8, backgroundColor: theme.colors.backgroundGray100, marginHorizontal: -40, marginTop: 20 }} />
41
93
  </>
42
94
  )}
43
95
  </CCList>
44
96
  ))}
97
+ {isMultiCheckout && (
98
+ <>
99
+ {!!cartsAvailable.length && (
100
+ <ChCartsTotal>
101
+ {!!totalCartsFee && configs?.multi_business_checkout_show_combined_delivery_fee?.value === '1' && (
102
+ <View style={{ flexDirection: 'row', justifyContent: 'space-between' }}>
103
+ <OText size={14} lineHeight={24} color={theme.colors.textNormal} weight={'400'}>
104
+ {t('TOTAL_DELIVERY_FEE', 'Total delivery fee')}
105
+ </OText>
106
+ <OText size={14} lineHeight={24} color={theme.colors.textNormal} weight={'400'}>
107
+ {parsePrice(totalCartsFee)}
108
+ </OText>
109
+ </View>
110
+ )}
111
+ {cartsAvailable.reduce((sum: any, cart: any) => sum + cart?.driver_tip, 0) > 0 &&
112
+ configs?.multi_business_checkout_show_combined_driver_tip?.value === '1' && (
113
+ <View style={{ flexDirection: 'row', justifyContent: 'space-between' }}>
114
+ <OText size={14} lineHeight={24} color={theme.colors.textNormal} weight={'400'}>
115
+ {t('DRIVER_TIP', 'Driver tip')}
116
+ </OText>
117
+ <OText size={14} lineHeight={24} color={theme.colors.textNormal} weight={'400'}>
118
+ {parsePrice(cartsAvailable.reduce((sum: any, cart: any) => sum + cart?.driver_tip, 0))}
119
+ </OText>
120
+ </View>
121
+ )}
122
+ <View style={{ flexDirection: 'row', justifyContent: 'space-between' }}>
123
+ <OText size={16} lineHeight={24} color={theme.colors.textNormal} weight={'500'}>
124
+ {t('TOTAL_FOR_ALL_CARTS', 'Total for all Carts')}
125
+ </OText>
126
+ <OText size={16} lineHeight={24} color={theme.colors.textNormal} weight={'500'}>{parsePrice(totalCartsPrice)}</OText>
127
+ </View>
128
+ </ChCartsTotal>
129
+ )}
130
+ <CheckoutAction style={{ marginTop: 0 }}>
131
+ <OButton
132
+ text={t('CHECKOUT', 'Checkout')}
133
+ bgColor={!cartsAvailable.length ? theme.colors.secundary : theme.colors.primary}
134
+ isDisabled={!cartsAvailable.length}
135
+ borderColor={theme.colors.primary}
136
+ imgRightSrc={null}
137
+ textStyle={{ color: 'white', textAlign: 'center', flex: 1 }}
138
+ onClick={() => handleCheckoutRedirect()}
139
+ style={{ width: '100%', flexDirection: 'row', justifyContent: 'center', borderRadius: 7.6, shadowOpacity: 0 }}
140
+ />
141
+ </CheckoutAction>
142
+ </>
143
+ )}
45
144
  </>
46
145
  )}
47
146
  {(!carts || carts?.length === 0) && (
@@ -1,7 +1,7 @@
1
1
  import styled from 'styled-components/native';
2
2
 
3
3
  export const CCContainer = styled.View`
4
- padding: 20px 40px;
4
+ padding-vertical: 20px;
5
5
  `
6
6
 
7
7
  export const CCNotCarts = styled.View`
@@ -17,3 +17,17 @@ export const CCNotCarts = styled.View`
17
17
  export const CCList = styled.ScrollView`
18
18
  padding: 10px 0px;
19
19
  `
20
+
21
+ export const CheckoutAction = styled.View`
22
+ width: 100%;
23
+ display: flex;
24
+ justify-content: center;
25
+ flex-direction: column;
26
+ align-items: center;
27
+ margin-top: 10px;
28
+ margin-bottom: 10px;
29
+ `
30
+
31
+ export const ChCartsTotal = styled.View`
32
+ margin-bottom: 16px;
33
+ `