ordering-ui-react-native 0.15.35 → 0.15.36-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 (180) hide show
  1. package/package.json +4 -2
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/BusinessController/index.tsx +8 -2
  4. package/src/components/BusinessTypeFilter/index.tsx +4 -1
  5. package/src/components/BusinessesListing/index.tsx +1 -1
  6. package/src/components/Checkout/index.tsx +23 -3
  7. package/src/components/DriverTips/index.tsx +11 -6
  8. package/src/components/LanguageSelector/index.tsx +7 -2
  9. package/src/components/LoginForm/index.tsx +3 -1
  10. package/src/components/OrderDetails/index.tsx +2 -2
  11. package/src/components/PaymentOptions/index.tsx +9 -16
  12. package/src/components/PaymentOptionsWebView/index.tsx +123 -124
  13. package/src/components/SignupForm/index.tsx +3 -1
  14. package/src/components/SingleProductCard/index.tsx +16 -4
  15. package/src/components/StripeElementsForm/index.tsx +27 -48
  16. package/src/components/StripeMethodForm/index.tsx +1 -2
  17. package/src/components/UpsellingProducts/index.tsx +1 -1
  18. package/src/components/UserProfileForm/index.tsx +63 -6
  19. package/src/components/UserProfileForm/styles.tsx +8 -0
  20. package/src/components/VerifyPhone/styles.tsx +1 -2
  21. package/src/components/shared/OModal.tsx +1 -1
  22. package/src/config.json +0 -2
  23. package/src/hooks/useCountdownTimer.tsx +26 -0
  24. package/src/navigators/CheckoutNavigator.tsx +6 -0
  25. package/src/navigators/HomeNavigator.tsx +12 -0
  26. package/src/pages/BusinessProductsList.tsx +1 -0
  27. package/src/pages/BusinessesListing.tsx +1 -1
  28. package/src/pages/Checkout.tsx +1 -1
  29. package/src/pages/MultiCheckout.tsx +31 -0
  30. package/src/pages/MultiOrdersDetails.tsx +27 -0
  31. package/src/pages/Sessions.tsx +22 -0
  32. package/src/types/index.tsx +5 -11
  33. package/src/utils/index.tsx +68 -1
  34. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +103 -15
  35. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +6 -0
  36. package/themes/business/src/components/Chat/index.tsx +38 -86
  37. package/themes/business/src/components/DriverMap/index.tsx +6 -5
  38. package/themes/business/src/components/Home/index.tsx +128 -55
  39. package/themes/business/src/components/Home/styles.tsx +8 -1
  40. package/themes/business/src/components/LoginForm/index.tsx +89 -2
  41. package/themes/business/src/components/LoginForm/styles.tsx +6 -0
  42. package/themes/business/src/components/LogoutButton/index.tsx +1 -1
  43. package/themes/business/src/components/NewOrderNotification/index.tsx +79 -105
  44. package/themes/business/src/components/OrderDetails/Business.tsx +1 -1
  45. package/themes/business/src/components/OrderDetails/Delivery.tsx +32 -15
  46. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +157 -89
  47. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +6 -0
  48. package/themes/business/src/components/OrderDetails/styles.tsx +7 -0
  49. package/themes/business/src/components/OrdersListManager/index.tsx +52 -49
  50. package/themes/business/src/components/OrdersOption/index.tsx +57 -50
  51. package/themes/business/src/components/PreviousOrders/index.tsx +50 -14
  52. package/themes/business/src/components/ProductItemAccordion/index.tsx +2 -2
  53. package/themes/business/src/components/shared/OModal.tsx +1 -1
  54. package/themes/business/src/types/index.tsx +5 -1
  55. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  56. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  57. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  58. package/themes/kiosk/src/components/Cart/index.tsx +99 -25
  59. package/themes/kiosk/src/components/Cart/styles.tsx +6 -0
  60. package/themes/kiosk/src/components/Checkout/index.tsx +34 -22
  61. package/themes/kiosk/src/components/CustomerName/index.tsx +0 -6
  62. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  63. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  64. package/themes/kiosk/src/components/OrderDetails/index.tsx +165 -65
  65. package/themes/kiosk/src/components/OrderDetails/styles.tsx +5 -0
  66. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +10 -12
  67. package/themes/kiosk/src/components/PaymentOptions/index.tsx +1 -1
  68. package/themes/kiosk/src/components/ProductForm/index.tsx +2 -2
  69. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  70. package/themes/kiosk/src/types/index.d.ts +2 -0
  71. package/themes/original/index.tsx +188 -1
  72. package/themes/original/src/components/ActiveOrders/index.tsx +15 -132
  73. package/themes/original/src/components/ActiveOrders/styles.tsx +0 -54
  74. package/themes/original/src/components/AddressForm/index.tsx +15 -10
  75. package/themes/original/src/components/AddressList/index.tsx +56 -18
  76. package/themes/original/src/components/AppleLogin/index.tsx +117 -78
  77. package/themes/original/src/components/BusinessBasicInformation/index.tsx +96 -45
  78. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +28 -1
  79. package/themes/original/src/components/BusinessController/index.tsx +56 -16
  80. package/themes/original/src/components/BusinessController/styles.tsx +27 -0
  81. package/themes/original/src/components/BusinessFeaturedController/index.tsx +20 -1
  82. package/themes/original/src/components/BusinessFeaturedController/styles.tsx +23 -0
  83. package/themes/original/src/components/BusinessItemAccordion/index.tsx +4 -3
  84. package/themes/original/src/components/BusinessItemAccordion/styles.tsx +3 -1
  85. package/themes/original/src/components/BusinessListingSearch/index.tsx +125 -7
  86. package/themes/original/src/components/BusinessListingSearch/styles.tsx +14 -1
  87. package/themes/original/src/components/BusinessMenuList/index.tsx +11 -4
  88. package/themes/original/src/components/BusinessPreorder/index.tsx +142 -122
  89. package/themes/original/src/components/BusinessProductsCategories/index.tsx +9 -7
  90. package/themes/original/src/components/BusinessProductsList/CategoryDescription/index.tsx +44 -0
  91. package/themes/original/src/components/BusinessProductsList/index.tsx +139 -36
  92. package/themes/original/src/components/BusinessProductsList/styles.tsx +29 -2
  93. package/themes/original/src/components/BusinessProductsListing/index.tsx +125 -21
  94. package/themes/original/src/components/BusinessProductsListing/styles.tsx +22 -0
  95. package/themes/original/src/components/BusinessReviews/index.tsx +4 -25
  96. package/themes/original/src/components/BusinessTypeFilter/index.tsx +1 -2
  97. package/themes/original/src/components/BusinessesListing/index.tsx +85 -45
  98. package/themes/original/src/components/Cart/index.tsx +60 -43
  99. package/themes/original/src/components/CartContent/index.tsx +2 -2
  100. package/themes/original/src/components/Checkout/index.tsx +59 -48
  101. package/themes/original/src/components/DriverTips/index.tsx +17 -12
  102. package/themes/original/src/components/Favorite/index.tsx +91 -0
  103. package/themes/original/src/components/Favorite/styles.tsx +22 -0
  104. package/themes/original/src/components/FavoriteList/index.tsx +287 -0
  105. package/themes/original/src/components/FavoriteList/styles.tsx +5 -0
  106. package/themes/original/src/components/ForgotPasswordForm/index.tsx +84 -4
  107. package/themes/original/src/components/GPSButton/index.tsx +15 -8
  108. package/themes/original/src/components/GoogleMap/index.tsx +1 -0
  109. package/themes/original/src/components/Help/index.tsx +21 -4
  110. package/themes/original/src/components/HighestRatedBusinesses/index.tsx +18 -1
  111. package/themes/original/src/components/Home/index.tsx +1 -1
  112. package/themes/original/src/components/LastOrders/index.tsx +12 -1
  113. package/themes/original/src/components/LoginForm/Otp/index.tsx +90 -0
  114. package/themes/original/src/components/LoginForm/Otp/styles.tsx +7 -0
  115. package/themes/original/src/components/LoginForm/index.tsx +394 -155
  116. package/themes/original/src/components/LoginForm/styles.tsx +7 -4
  117. package/themes/original/src/components/LogoutButton/index.tsx +7 -1
  118. package/themes/original/src/components/MessageListing/index.tsx +10 -1
  119. package/themes/original/src/components/Messages/index.tsx +6 -1
  120. package/themes/original/src/components/Messages/styles.tsx +1 -3
  121. package/themes/original/src/components/MomentOption/index.tsx +10 -1
  122. package/themes/original/src/components/MomentOption/styles.tsx +1 -1
  123. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +243 -0
  124. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/styles.tsx +46 -0
  125. package/themes/original/src/components/MultiCheckout/index.tsx +298 -0
  126. package/themes/original/src/components/MultiCheckout/styles.tsx +59 -0
  127. package/themes/original/src/components/MultiOrdersDetails/SingleOrderCard.tsx +372 -0
  128. package/themes/original/src/components/MultiOrdersDetails/index.tsx +258 -0
  129. package/themes/original/src/components/MultiOrdersDetails/styles.tsx +50 -0
  130. package/themes/original/src/components/OrderDetails/index.tsx +56 -33
  131. package/themes/original/src/components/OrderDetails/styles.tsx +1 -2
  132. package/themes/original/src/components/OrderProgress/index.tsx +3 -3
  133. package/themes/original/src/components/OrderProgress/styles.tsx +1 -0
  134. package/themes/original/src/components/OrderSummary/index.tsx +3 -3
  135. package/themes/original/src/components/OrderTypeSelector/index.tsx +4 -2
  136. package/themes/original/src/components/OrdersOption/index.tsx +57 -56
  137. package/themes/original/src/components/OrdersOption/styles.tsx +0 -6
  138. package/themes/original/src/components/PaymentOptionCash/index.tsx +2 -2
  139. package/themes/original/src/components/PaymentOptionWallet/index.tsx +22 -24
  140. package/themes/original/src/components/PaymentOptionWallet/styles.tsx +1 -1
  141. package/themes/original/src/components/PaymentOptions/index.tsx +9 -21
  142. package/themes/original/src/components/PhoneInputNumber/index.tsx +1 -1
  143. package/themes/original/src/components/PreviousOrders/index.tsx +18 -145
  144. package/themes/original/src/components/ProductForm/index.tsx +76 -61
  145. package/themes/original/src/components/ProductForm/styles.tsx +0 -1
  146. package/themes/original/src/components/ProductItemAccordion/index.tsx +2 -2
  147. package/themes/original/src/components/ProductOptionSubOption/index.tsx +18 -12
  148. package/themes/original/src/components/Promotions/index.tsx +250 -0
  149. package/themes/original/src/components/Promotions/styles.tsx +60 -0
  150. package/themes/original/src/components/SearchBar/index.tsx +4 -1
  151. package/themes/original/src/components/Sessions/index.tsx +160 -0
  152. package/themes/original/src/components/Sessions/styles.tsx +15 -0
  153. package/themes/original/src/components/SignupForm/index.tsx +9 -4
  154. package/themes/original/src/components/SingleOrderCard/index.tsx +282 -0
  155. package/themes/original/src/components/SingleOrderCard/styles.tsx +54 -0
  156. package/themes/original/src/components/SingleProductCard/index.tsx +82 -30
  157. package/themes/original/src/components/SingleProductCard/styles.tsx +28 -1
  158. package/themes/original/src/components/StripeElementsForm/index.tsx +10 -2
  159. package/themes/original/src/components/StripeElementsForm/naked.tsx +2 -2
  160. package/themes/original/src/components/TaxInformation/index.tsx +10 -4
  161. package/themes/original/src/components/UpsellingProducts/index.tsx +86 -74
  162. package/themes/original/src/components/UserDetails/index.tsx +5 -96
  163. package/themes/original/src/components/UserFormDetails/index.tsx +34 -24
  164. package/themes/original/src/components/UserProfile/index.tsx +62 -8
  165. package/themes/original/src/components/UserProfileForm/index.tsx +20 -18
  166. package/themes/original/src/components/UserVerification/index.tsx +178 -192
  167. package/themes/original/src/components/VerifyPhone/index.tsx +10 -7
  168. package/themes/original/src/components/VerifyPhone/styles.tsx +2 -1
  169. package/themes/original/src/components/Wallets/index.tsx +76 -9
  170. package/themes/original/src/components/Wallets/styles.tsx +21 -0
  171. package/themes/original/src/components/shared/HeaderTitle.tsx +21 -0
  172. package/themes/original/src/components/shared/OModal.tsx +4 -2
  173. package/themes/original/src/components/shared/index.tsx +2 -0
  174. package/themes/original/src/config/constants.tsx +6 -6
  175. package/themes/original/src/types/index.tsx +107 -9
  176. package/themes/original/src/utils/index.tsx +28 -2
  177. package/themes/single-business/src/components/AddressList/index.tsx +1 -1
  178. package/themes/single-business/src/components/OrderTypeSelector/index.tsx +1 -1
  179. package/themes/single-business/src/components/UserProfile/index.tsx +1 -1
  180. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -39,7 +39,8 @@ const CartUI = (props: any) => {
39
39
  handleChangeComment,
40
40
  commentState,
41
41
  onNavigationRedirect,
42
- handleRemoveOfferClick
42
+ handleRemoveOfferClick,
43
+ isMultiCheckout
43
44
  } = props
44
45
 
45
46
  const theme = useTheme();
@@ -59,6 +60,7 @@ const CartUI = (props: any) => {
59
60
 
60
61
  const isCartPending = cart?.status === 2
61
62
  const isCouponEnabled = validationFields?.fields?.checkout?.coupon?.enabled
63
+ const isCheckoutMultiBusinessEnabled: Boolean = configs?.checkout_multi_business_enabled?.value === '1'
62
64
 
63
65
  const business: any = (orderState?.carts && Object.values(orderState.carts).find((_cart: any) => _cart?.uuid === props.cartuuid)) ?? {}
64
66
  const businessId = business?.business_id ?? null
@@ -96,17 +98,23 @@ const CartUI = (props: any) => {
96
98
  const handleUpsellingPage = () => {
97
99
  setOpenUpselling(false)
98
100
  setCanOpenUpselling(false)
99
- props.onNavigationRedirect('CheckoutNavigator', {
100
- screen: 'CheckoutPage',
101
- cartUuid: cart?.uuid,
102
- businessLogo: cart?.business?.logo,
103
- businessName: cart?.business?.name,
104
- cartTotal: cart?.total
105
- })
101
+ if (isCheckoutMultiBusinessEnabled) {
102
+ props.onNavigationRedirect('CheckoutNavigator', {
103
+ screen: 'MultiCheckout'
104
+ })
105
+ } else {
106
+ props.onNavigationRedirect('CheckoutNavigator', {
107
+ screen: 'CheckoutPage',
108
+ cartUuid: cart?.uuid,
109
+ businessLogo: cart?.business?.logo,
110
+ businessName: cart?.business?.name,
111
+ cartTotal: cart?.total
112
+ })
113
+ }
106
114
  }
107
115
 
108
116
  const getIncludedTaxes = () => {
109
- if (cart?.taxes === null) {
117
+ if (cart?.taxes === null || !cart?.taxes) {
110
118
  return cart.business.tax_type === 1 ? cart?.tax : 0
111
119
  } else {
112
120
  return cart?.taxes.reduce((taxIncluded: number, tax: any) => {
@@ -162,13 +170,14 @@ const CartUI = (props: any) => {
162
170
  handleClearProducts={handleClearProducts}
163
171
  handleCartOpen={handleCartOpen}
164
172
  onNavigationRedirect={props.onNavigationRedirect}
165
- handleChangeStore={props.isFranchiseApp ? () => setOpenChangeStore(true) : null}
173
+ handleChangeStore={() => setOpenChangeStore(true)}
166
174
  handleClickCheckout={() => setOpenUpselling(true)}
167
175
  checkoutButtonDisabled={(openUpselling && !canOpenUpselling) || cart?.subtotal < cart?.minimum || !cart?.valid_address}
176
+ isMultiCheckout={isMultiCheckout}
168
177
  >
169
- {cart?.products?.length > 0 && cart?.products.map((product: any) => (
178
+ {cart?.products?.length > 0 && cart?.products.map((product: any, i: number) => (
170
179
  <ProductItemAccordion
171
- key={product.code}
180
+ key={`${product.code}_${i}`}
172
181
  isCartPending={isCartPending}
173
182
  isCartProduct
174
183
  product={product}
@@ -202,8 +211,8 @@ const CartUI = (props: any) => {
202
211
  </OSTable>
203
212
  )}
204
213
  {
205
- cart?.offers?.length > 0 && cart?.offers?.filter((offer: any) => offer?.target === 1)?.map((offer: any) => (
206
- <OSTable key={offer.id}>
214
+ cart?.offers?.length > 0 && cart?.offers?.filter((offer: any) => offer?.target === 1)?.map((offer: any, i: number) => (
215
+ <OSTable key={`${offer.id}_${i}`}>
207
216
  <OSRow>
208
217
  <OText size={12} lineHeight={18}>{offer.name}</OText>
209
218
  {offer.rate_type === 1 && (
@@ -234,8 +243,8 @@ const CartUI = (props: any) => {
234
243
  </OSTable>
235
244
  )}
236
245
  {
237
- cart.taxes?.length > 0 && cart.taxes.filter((tax: any) => tax.type === 2 && tax?.rate !== 0).map((tax: any) => (
238
- <OSTable key={tax.id}>
246
+ cart.taxes?.length > 0 && cart.taxes.filter((tax: any) => tax.type === 2 && tax?.rate !== 0).map((tax: any, i: number) => (
247
+ <OSTable key={`${tax.id}_${i}`}>
239
248
  <OSRow>
240
249
  <OText size={12} lineHeight={18} numberOfLines={1} >
241
250
  {tax.name || t('INHERIT_FROM_BUSINESS', 'Inherit from business')}{' '}
@@ -250,12 +259,12 @@ const CartUI = (props: any) => {
250
259
  ))
251
260
  }
252
261
  {
253
- cart?.fees?.length > 0 && cart?.fees?.filter((fee: any) => !(fee.fixed === 0 && fee.percentage === 0)).map((fee: any) => (
254
- <OSTable key={fee?.id}>
262
+ cart?.fees?.length > 0 && cart?.fees?.filter((fee: any) => !(fee.fixed === 0 && fee.percentage === 0)).map((fee: any, i: number) => (
263
+ <OSTable key={`${fee.id}_${i}`}>
255
264
  <OSRow>
256
265
  <OText size={12} lineHeight={18} numberOfLines={1}>
257
266
  {fee.name || t('INHERIT_FROM_BUSINESS', 'Inherit from business')}{' '}
258
- ({fee?.fixed > 0 && `${parsePrice(fee?.fixed)} + `}{fee.percentage}%){' '}
267
+ ({fee?.fixed > 0 && `${parsePrice(fee?.fixed)}${fee.percentage > 0 ? ' + ' : ''}`}{fee.percentage > 0 && `${fee.percentage}%`}){' '}
259
268
  </OText>
260
269
  <TouchableOpacity onPress={() => setOpenTaxModal({ open: true, data: fee, type: 'fee' })} >
261
270
  <AntIcon name='infocirlceo' size={16} color={theme.colors.primary} />
@@ -293,8 +302,8 @@ const CartUI = (props: any) => {
293
302
  </OSTable>
294
303
  )}
295
304
  {
296
- cart?.offers?.length > 0 && cart?.offers?.filter((offer: any) => offer?.target === 2)?.map((offer: any) => (
297
- <OSTable key={offer.id}>
305
+ cart?.offers?.length > 0 && cart?.offers?.filter((offer: any) => offer?.target === 2)?.map((offer: any, i: number) => (
306
+ <OSTable key={`${offer.id}_${i}`}>
298
307
  <OSRow>
299
308
  <OText size={12} lineHeight={18}>{offer.name}</OText>
300
309
  {offer.rate_type === 1 && (
@@ -409,30 +418,40 @@ const CartUI = (props: any) => {
409
418
  )}
410
419
  </OSBill>
411
420
  )}
412
- {cart?.valid_products && (
413
- <CheckoutAction>
414
- <OButton
415
- text={(cart?.subtotal >= cart?.minimum || !cart?.minimum) && cart?.valid_address ? (
416
- !openUpselling !== canOpenUpselling ? t('CHECKOUT', 'Checkout') : t('LOADING', 'Loading')
417
- ) : !cart?.valid_address ? (
418
- `${t('OUT_OF_COVERAGE', 'Out of Coverage')}`
419
- ) : (
420
- `${t('MINIMUN_SUBTOTAL_ORDER', 'Minimum subtotal order:')} ${parsePrice(cart?.minimum)}`
421
- )}
422
- bgColor={(cart?.subtotal < cart?.minimum || !cart?.valid_address) ? theme.colors.secundary : theme.colors.primary}
423
- isDisabled={(openUpselling && !canOpenUpselling) || cart?.subtotal < cart?.minimum || !cart?.valid_address}
424
- borderColor={theme.colors.primary}
425
- imgRightSrc={null}
426
- textStyle={{ color: 'white', textAlign: 'center', flex: 1 }}
427
- onClick={() => setOpenUpselling(true)}
428
- style={{ width: '100%', flexDirection: 'row', justifyContent: 'center', borderRadius: 7.6, shadowOpacity: 0 }}
429
- />
430
- </CheckoutAction>
421
+ {!isMultiCheckout && (
422
+ <>
423
+ {cart?.valid_products ? (
424
+ <CheckoutAction>
425
+ <OButton
426
+ text={(cart?.subtotal >= cart?.minimum || !cart?.minimum) && cart?.valid_address ? (
427
+ !openUpselling !== canOpenUpselling ? t('CHECKOUT', 'Checkout') : t('LOADING', 'Loading')
428
+ ) : !cart?.valid_address ? (
429
+ `${t('OUT_OF_COVERAGE', 'Out of Coverage')}`
430
+ ) : (
431
+ `${t('MINIMUN_SUBTOTAL_ORDER', 'Minimum subtotal order:')} ${parsePrice(cart?.minimum)}`
432
+ )}
433
+ bgColor={(cart?.subtotal < cart?.minimum || !cart?.valid_address) ? theme.colors.secundary : theme.colors.primary}
434
+ isDisabled={(openUpselling && !canOpenUpselling) || cart?.subtotal < cart?.minimum || !cart?.valid_address}
435
+ borderColor={theme.colors.primary}
436
+ imgRightSrc={null}
437
+ textStyle={{ color: 'white', textAlign: 'center', flex: 1 }}
438
+ onClick={() => setOpenUpselling(true)}
439
+ style={{ width: '100%', flexDirection: 'row', justifyContent: 'center', borderRadius: 7.6, shadowOpacity: 0 }}
440
+ />
441
+ </CheckoutAction>
442
+ ) : (
443
+ <View style={{ alignItems: 'center', width: '100%' }}>
444
+ <OText size={12} color={theme.colors.red} style={{ textAlign: 'center', marginTop: 5 }}>
445
+ {t('WARNING_INVALID_PRODUCTS_CHECKOUT', 'To continue with your checkout, please remove from your cart the products that are not available.')}
446
+ </OText>
447
+ </View>
448
+ )}
449
+ </>
431
450
  )}
432
451
  </BusinessItemAccordion>
433
452
 
434
453
  <OModal
435
- open={openChangeStore && props.isFranchiseApp}
454
+ open={openChangeStore}
436
455
  entireModal
437
456
  customClose
438
457
  onClose={() => setOpenChangeStore(false)}
@@ -446,8 +465,6 @@ const CartUI = (props: any) => {
446
465
  open={openTaxModal.open}
447
466
  onClose={() => setOpenTaxModal({ open: false, data: null, type: '' })}
448
467
  entireModal
449
- title={`${openTaxModal.data?.name ||
450
- t('INHERIT_FROM_BUSINESS', 'Inherit from business')} ${openTaxModal.data?.rate_type !== 2 ? `(${typeof openTaxModal.data?.rate === 'number' ? `${openTaxModal.data?.rate}%` : `${parsePrice(openTaxModal.data?.fixed ?? 0)} + ${openTaxModal.data?.percentage}%`})` : ''} `}
451
468
  >
452
469
  <TaxInformation
453
470
  type={openTaxModal.type}
@@ -22,9 +22,9 @@ export const CartContent = (props: any) => {
22
22
  <CCContainer>
23
23
  {isOrderStateCarts && carts?.length > 0 && (
24
24
  <>
25
- <OText size={24} lineHeight={36} weight={'600'} style={{ marginBottom: 20 }}>
25
+ {/* <OText size={24} lineHeight={36} weight={'600'} style={{ marginBottom: 20 }}>
26
26
  {carts.length > 1 ? t('MY_CARTS', 'My Carts') : t('CART', 'Cart')}
27
- </OText>
27
+ </OText> */}
28
28
  {carts.map((cart: any, i: number) => (
29
29
  <CCList key={i} style={{ overflow: 'visible' }}>
30
30
  {cart.products.length > 0 && (
@@ -85,8 +85,7 @@ const CheckoutUI = (props: any) => {
85
85
  deliveryOptionSelected,
86
86
  instructionsOptions,
87
87
  handleChangeDeliveryOption,
88
- currency,
89
- merchantId
88
+ currency
90
89
  } = props
91
90
 
92
91
  const theme = useTheme();
@@ -113,7 +112,10 @@ const CheckoutUI = (props: any) => {
113
112
  right: Platform.OS === 'ios' ? 5 : (I18nManager.isRTL ? 30 : 0),
114
113
  position: 'absolute',
115
114
  fontSize: 20
116
- }
115
+ },
116
+ wrapperNavbar: Platform.OS === 'ios'
117
+ ? { paddingVertical: 0, paddingHorizontal: 40 }
118
+ : { paddingVertical: 20, paddingHorizontal: 40 }
117
119
  })
118
120
 
119
121
  const [, { showToast }] = useToast();
@@ -133,11 +135,20 @@ const CheckoutUI = (props: any) => {
133
135
  const [isDeliveryOptionModalVisible, setIsDeliveryOptionModalVisible] = useState(false)
134
136
  const [showGateway, setShowGateway] = useState<any>({ closedByUsed: false, open: false });
135
137
  const [webviewPaymethod, setWebviewPaymethod] = useState<any>(null)
136
-
138
+
137
139
  const placeSpotTypes = [3, 4]
138
- const isWalletEnabled = configs?.wallet_enabled?.value === '1' && (configs?.wallet_cash_enabled?.value === '1' || configs?.wallet_credit_point_enabled?.value === '1')
140
+ const businessConfigs = businessDetails?.business?.configs ?? []
141
+ const isWalletCashEnabled = businessConfigs.find((config: any) => config.key === 'wallet_cash_enabled')?.value === '1'
142
+ const isWalletCreditPointsEnabled = businessConfigs.find((config: any) => config.key === 'wallet_credit_point_enabled')?.value === '1'
143
+ const isWalletEnabled = configs?.cash_wallet?.value && configs?.wallet_enabled?.value === '1' && (isWalletCashEnabled || isWalletCreditPointsEnabled)
144
+
139
145
  const isPreOrder = configs?.preorder_status_enabled?.value === '1'
140
- const isDisabledButtonPlace = loading || !cart?.valid || (!paymethodSelected && cart?.balance > 0) || placing || errorCash || cart?.subtotal < cart?.minimum || (placeSpotTypes.includes(options?.type) && !cart?.place)
146
+ const isDisabledButtonPlace = loading || !cart?.valid || (!paymethodSelected && cart?.balance > 0) || placing || errorCash ||
147
+ cart?.subtotal < cart?.minimum || (placeSpotTypes.includes(options?.type) && !cart?.place) ||
148
+ (options.type === 1 &&
149
+ validationFields?.fields?.checkout?.driver_tip?.enabled &&
150
+ validationFields?.fields?.checkout?.driver_tip?.required &&
151
+ (Number(cart?.driver_tip) <= 0))
141
152
 
142
153
  const driverTipsOptions = typeof configs?.driver_tip_options?.value === 'string'
143
154
  ? JSON.parse(configs?.driver_tip_options?.value) || []
@@ -239,7 +250,7 @@ const CheckoutUI = (props: any) => {
239
250
 
240
251
  useEffect(() => {
241
252
  if (cart?.products?.length === 0) {
242
- navigation?.canGoBack() && navigation.goBack();
253
+ onNavigationRedirect('Business', { store: cart?.business?.slug, header: null, logo: null })
243
254
  }
244
255
  }, [cart?.products])
245
256
 
@@ -250,13 +261,18 @@ const CheckoutUI = (props: any) => {
250
261
  return (
251
262
  <>
252
263
  <Container noPadding>
253
- <NavBar
254
- isVertical
255
- onActionLeft={() => navigation?.canGoBack() && navigation.goBack()}
256
- title={t('CHECKOUT', 'Checkout')}
257
- titleStyle={{ marginLeft: 0, marginRight: 0, paddingLeft: 40 }}
258
- btnStyle={{ marginLeft: 40, padding: 40 }}
259
- />
264
+ <View style={styles.wrapperNavbar}>
265
+ <NavBar
266
+ title={t('CHECKOUT', 'Checkout')}
267
+ titleAlign={'center'}
268
+ onActionLeft={() => navigation?.canGoBack() && navigation.goBack()}
269
+ showCall={false}
270
+ btnStyle={{ paddingLeft: 0 }}
271
+ style={{ marginTop: Platform.OS === 'ios' ? 0 : 30 }}
272
+ titleWrapStyle={{ paddingHorizontal: 0 }}
273
+ titleStyle={{ marginRight: 0, marginLeft: 0 }}
274
+ />
275
+ </View>
260
276
  <ChContainer style={styles.pagePadding}>
261
277
  <ChSection style={{ paddingTop: 0 }}>
262
278
  <ChHeader>
@@ -547,18 +563,17 @@ const CheckoutUI = (props: any) => {
547
563
  onNavigationRedirect={onNavigationRedirect}
548
564
  paySelected={paymethodSelected}
549
565
  handlePaymentMethodClickCustom={handlePaymentMethodClick}
550
- handlePlaceOrder={handlePlaceOrder}
551
- merchantId={merchantId}
552
566
  />
553
567
  </ChPaymethods>
554
568
  </ChSection>
555
569
  )}
556
570
 
557
- {!cartState.loading && cart && isWalletEnabled && (
571
+ {!cartState.loading && cart && isWalletEnabled && businessDetails?.business?.configs && (
558
572
  <WalletPaymentOptionContainer>
559
573
  <PaymentOptionWallet
560
574
  cart={cart}
561
575
  businessId={cart?.business_id}
576
+ businessConfigs={businessDetails?.business?.configs}
562
577
  />
563
578
  </WalletPaymentOptionContainer>
564
579
  )}
@@ -596,21 +611,19 @@ const CheckoutUI = (props: any) => {
596
611
  </OText>
597
612
  </TouchableOpacity>
598
613
  </CartHeader>
599
- {props.isFranchiseApp && (
600
- <TouchableOpacity
601
- onPress={() => setOpenChangeStore(true)}
602
- style={{ alignSelf: 'flex-start' }}
614
+ <TouchableOpacity
615
+ onPress={() => setOpenChangeStore(true)}
616
+ style={{ alignSelf: 'flex-start' }}
617
+ >
618
+ <OText
619
+ size={12}
620
+ lineHeight={18}
621
+ color={theme.colors.textSecondary}
622
+ style={{ textDecorationLine: 'underline' }}
603
623
  >
604
- <OText
605
- size={12}
606
- lineHeight={18}
607
- color={theme.colors.textSecondary}
608
- style={{ textDecorationLine: 'underline' }}
609
- >
610
- {t('CHANGE_STORE', 'Change store')}
611
- </OText>
612
- </TouchableOpacity>
613
- )}
624
+ {t('CHANGE_STORE', 'Change store')}
625
+ </OText>
626
+ </TouchableOpacity>
614
627
  <OrderSummary
615
628
  cart={cart}
616
629
  isCartPending={cart?.status === 2}
@@ -624,7 +637,7 @@ const CheckoutUI = (props: any) => {
624
637
 
625
638
  {!cartState.loading && cart && (
626
639
  <View>
627
- <ChErrors style={{ marginBottom: 0 }}>
640
+ <ChErrors style={{ marginBottom: 10 }}>
628
641
  {!cart?.valid_address && cart?.status !== 2 && (
629
642
  <OText
630
643
  color={theme.colors.error}
@@ -648,7 +661,7 @@ const CheckoutUI = (props: any) => {
648
661
  color={theme.colors.error}
649
662
  size={12}
650
663
  >
651
- {t('WARNING_INVALID_PRODUCTS', 'Some products are invalid, please check them.')}
664
+ {t('WARNING_INVALID_PRODUCTS_CHECKOUT', 'To continue with your checkout, please remove from your cart the products that are not available.')}
652
665
  </OText>
653
666
  )}
654
667
  {placeSpotTypes.includes(options?.type) && !cart?.place && (
@@ -659,11 +672,22 @@ const CheckoutUI = (props: any) => {
659
672
  {t('WARNING_PLACE_SPOT', 'Please, select your spot to place order.')}
660
673
  </OText>
661
674
  )}
675
+ {options.type === 1 &&
676
+ validationFields?.fields?.checkout?.driver_tip?.enabled &&
677
+ validationFields?.fields?.checkout?.driver_tip?.required &&
678
+ (Number(cart?.driver_tip) <= 0) && (
679
+ <OText
680
+ color={theme.colors.error}
681
+ size={12}
682
+ >
683
+ {t('WARNING_INVALID_DRIVER_TIP', 'Driver Tip is required.')}
684
+ </OText>
685
+ )}
662
686
  </ChErrors>
663
687
  </View>
664
688
  )}
665
689
  <OModal
666
- open={openChangeStore && props.isFranchiseApp}
690
+ open={openChangeStore}
667
691
  entireModal
668
692
  customClose
669
693
  onClose={() => setOpenChangeStore(false)}
@@ -707,19 +731,6 @@ const CheckoutUI = (props: any) => {
707
731
  setShowGateway={setShowGateway}
708
732
  />
709
733
  )}
710
- {webviewPaymethod?.gateway === 'square' && showGateway.open && (
711
- <PaymentOptionsWebView
712
- onNavigationRedirect={onNavigationRedirect}
713
- uri={`https://test-square-f50f7.web.app`}
714
- user={user}
715
- token={token}
716
- cart={cart}
717
- currency={currency}
718
- webviewPaymethod={webviewPaymethod}
719
- setShowGateway={setShowGateway}
720
- locationId={'L1NGAY5M6KJRX'}
721
- />
722
- )}
723
734
  </>
724
735
  )
725
736
  }
@@ -872,7 +883,7 @@ export const Checkout = (props: any) => {
872
883
  ...props,
873
884
  UIComponent: CheckoutUI,
874
885
  cartState,
875
- [props.isFranchiseApp ? 'uuid' : 'businessId']: props.isFranchiseApp ? cartUuid : cartState.cart?.business_id
886
+ uuid: cartUuid
876
887
  }
877
888
 
878
889
  return (
@@ -48,22 +48,28 @@ const DriverTipsUI = (props: any) => {
48
48
  }
49
49
  })
50
50
 
51
- const [value, setvalue] = useState(0);
51
+ const [value, setvalue] = useState('');
52
52
 
53
53
  const placeholderCurrency = (configs?.currency_position?.value || 'left') === 'left'
54
54
  ? `${configs?.format_number_currency?.value}0`
55
55
  : `0${configs?.format_number_currency?.value}`
56
56
 
57
57
  const handleChangeDriverTip = (val: any) => {
58
- let tip = parseFloat(val)
59
- tip = isNaN(tip) ? 0 : tip
60
- setvalue(tip)
58
+ const tip = Number(val)
59
+ if ((isNaN(tip) || tip < 0)) {
60
+ setvalue(value)
61
+ return
62
+ }
63
+ setvalue(val)
61
64
  }
62
-
65
+
63
66
  return (
64
67
  <DTContainer>
68
+ <DTLabel>
69
+ {t('CUSTOM_DRIVER_TIP_MESSAGE', '100% of these tips go directly to your driver')}
70
+ </DTLabel>
65
71
  <DTWrapperTips>
66
- {driverTipsOptions.map((option: any, i: number) => (
72
+ {!isDriverTipUseCustom && driverTipsOptions.map((option: any, i: number) => (
67
73
  <TouchableOpacity
68
74
  key={i}
69
75
  onPress={() => handlerChangeOption(option)}
@@ -79,7 +85,7 @@ const DriverTipsUI = (props: any) => {
79
85
  </TouchableOpacity>
80
86
  ))}
81
87
  </DTWrapperTips>
82
- {!driverTipsOptions.includes(driverTip) && driverTip > 0 && (
88
+ {(!isDriverTipUseCustom && !driverTipsOptions.includes(driverTip) && driverTip > 0) && (
83
89
  <OText
84
90
  color={theme.colors.error}
85
91
  size={16}
@@ -90,13 +96,12 @@ const DriverTipsUI = (props: any) => {
90
96
  )}
91
97
  {isDriverTipUseCustom && (
92
98
  <DTForm>
93
- <DTLabel>
94
- {t('CUSTOM_DRIVER_TIP_MESSAGE', '100% of these tips go directly to your driver')}
95
- </DTLabel>
96
99
  <DTWrapperInput>
97
100
  <OInput
98
101
  placeholder={placeholderCurrency}
99
102
  style={style.inputStyle}
103
+ value={value}
104
+ type={'numeric'}
100
105
  onChange={handleChangeDriverTip}
101
106
  autoCapitalize='none'
102
107
  autoCorrect={false}
@@ -108,10 +113,10 @@ const DriverTipsUI = (props: any) => {
108
113
  textStyle={{ color: 'white', fontSize: 14 }}
109
114
  imgRightSrc={null}
110
115
  style={{ borderRadius: 5, height: 44 }}
111
- isDisabled={!(value > 0 && value !== driverTip) || !value}
116
+ isDisabled={parseFloat(value || '0') < 0 || parseFloat(value || '0') === driverTip || value === ''}
112
117
  onClick={() => {
113
118
  handlerChangeOption(value)
114
- setvalue(0)
119
+ setvalue('')
115
120
  }}
116
121
  />
117
122
  </DTWrapperInput>
@@ -0,0 +1,91 @@
1
+ import React, { useState } from 'react'
2
+ import { useLanguage, useOrder } from 'ordering-components/native'
3
+ import { useTheme } from 'styled-components/native'
4
+ import { FavoriteList } from '../FavoriteList'
5
+ import NavBar from '../NavBar'
6
+ import { OText } from '../shared'
7
+
8
+ import {
9
+ TabContainer,
10
+ Tab,
11
+ Container
12
+ } from './styles'
13
+
14
+ export const Favorite = (props: any) => {
15
+ const {
16
+ navigation
17
+ } = props
18
+ const [, t] = useLanguage()
19
+ const theme = useTheme()
20
+ const [orderState] = useOrder()
21
+ const [tabSelected, setTabSelected] = useState('businesses')
22
+
23
+ const tabList = [
24
+ { key: 'businesses', name: t('BUSINESSES', 'Businesses') },
25
+ { key: 'products', name: t('PRODUCTS', 'Products') },
26
+ { key: 'orders', name: t('ORDERS', 'Orders') }
27
+ ]
28
+
29
+ const goToBack = () => navigation?.canGoBack() && navigation.goBack()
30
+
31
+ const onRedirect = (route: string, params?: any) => {
32
+ navigation.navigate(route, params)
33
+ }
34
+
35
+ return (
36
+ <Container>
37
+ <NavBar
38
+ title={t('FAVORITE', 'Favorite')}
39
+ titleAlign={'center'}
40
+ onActionLeft={goToBack}
41
+ showCall={false}
42
+ paddingTop={10}
43
+ btnStyle={{ paddingLeft: 0 }}
44
+ />
45
+ <TabContainer>
46
+ {tabList.map((menu, i) => (
47
+ <Tab
48
+ key={i}
49
+ active={menu.key === tabSelected}
50
+ onPress={() => setTabSelected(menu.key)}
51
+ >
52
+ <OText
53
+ color={menu.key === tabSelected ? theme.colors.textNormal : theme.colors.disabled}
54
+ size={14}
55
+ weight={menu.key === tabSelected ? '500' : '400'}
56
+ style={{ marginBottom: 12 }}
57
+ >
58
+ {menu.name}
59
+ </OText>
60
+ </Tab>
61
+ ))}
62
+ </TabContainer>
63
+ {tabSelected === 'businesses' && (
64
+ <FavoriteList
65
+ navigation={navigation}
66
+ onNavigationRedirect={onRedirect}
67
+ isBusiness
68
+ favoriteURL='favorite_businesses'
69
+ originalURL='business'
70
+ location={`${orderState.options?.address?.location?.lat},${orderState.options?.address?.location?.lng}`}
71
+ propsToFetch={['id', 'name', 'header', 'logo', 'location', 'address', 'ribbon', 'timezone', 'schedule', 'open', 'delivery_price', 'distance', 'delivery_time', 'pickup_time', 'reviews', 'featured', 'offers', 'food', 'laundry', 'alcohol', 'groceries', 'slug']}
72
+ />
73
+ )}
74
+ {tabSelected === 'products' && (
75
+ <FavoriteList
76
+ favoriteURL='favorite_products'
77
+ originalURL='products'
78
+ isProduct
79
+ />
80
+ )}
81
+ {tabSelected === 'orders' && (
82
+ <FavoriteList
83
+ onNavigationRedirect={onRedirect}
84
+ favoriteURL='favorite_orders'
85
+ originalURL='orders'
86
+ isOrder
87
+ />
88
+ )}
89
+ </Container>
90
+ )
91
+ }
@@ -0,0 +1,22 @@
1
+ import styled, { css } from 'styled-components/native'
2
+
3
+ export const TabContainer = styled.View`
4
+ flex-direction: row;
5
+ border-bottom-color: ${(props: any) => props.theme.colors.border};
6
+ border-bottom-width: 1px;
7
+ margin-bottom: 25px;
8
+ `
9
+
10
+ export const Tab = styled.TouchableOpacity`
11
+ margin-right: 32px;
12
+ ${(props: any) => props.active && css`
13
+ border-bottom-color: ${(props: any) => props.theme.colors.textNormal};
14
+ border-bottom-width: 1px;
15
+ `}
16
+ `
17
+
18
+ export const Container = styled.View`
19
+ padding-horizontal: 40px;
20
+ padding-bottom: 20px;
21
+ padding-top: 30px;
22
+ `