ordering-ui-react-native 0.17.90 → 0.17.91-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 (215) hide show
  1. package/package.json +8 -7
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/BusinessInformation/index.tsx +10 -9
  4. package/src/components/BusinessesListing/index.tsx +1 -1
  5. package/src/components/OrderCreating/index.tsx +1 -21
  6. package/src/components/PaymentOptionsWebView/index.tsx +29 -8
  7. package/src/components/PhoneInputNumber/index.tsx +6 -2
  8. package/src/components/StripeMethodForm/index.tsx +136 -102
  9. package/src/components/VerifyPhone/styles.tsx +1 -2
  10. package/src/components/shared/OToast.tsx +3 -2
  11. package/src/types/index.tsx +5 -0
  12. package/src/utils/index.tsx +5 -0
  13. package/themes/business/index.tsx +2 -0
  14. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +37 -27
  15. package/themes/business/src/components/BusinessController/index.tsx +0 -1
  16. package/themes/business/src/components/Chat/index.tsx +163 -123
  17. package/themes/business/src/components/DriverMap/index.tsx +17 -6
  18. package/themes/business/src/components/DriverSchedule/index.tsx +45 -8
  19. package/themes/business/src/components/FloatingButton/index.tsx +34 -31
  20. package/themes/business/src/components/GoogleMap/index.tsx +58 -57
  21. package/themes/business/src/components/LoginForm/Otp/index.tsx +31 -3
  22. package/themes/business/src/components/LoginForm/index.tsx +15 -22
  23. package/themes/business/src/components/MapView/index.tsx +14 -10
  24. package/themes/business/src/components/MessagesOption/index.tsx +20 -93
  25. package/themes/business/src/components/NewOrderNotification/index.tsx +123 -96
  26. package/themes/business/src/components/NotFoundSource/index.tsx +2 -2
  27. package/themes/business/src/components/OrderDetails/Business.tsx +1 -1
  28. package/themes/business/src/components/OrderDetails/Delivery.tsx +202 -12
  29. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +84 -37
  30. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +81 -66
  31. package/themes/business/src/components/OrderDetailsLogistic/index.tsx +200 -0
  32. package/themes/business/src/components/OrderDetailsLogistic/styles.tsx +5 -0
  33. package/themes/business/src/components/OrderMessage/index.tsx +19 -18
  34. package/themes/business/src/components/OrderSummary/index.tsx +114 -123
  35. package/themes/business/src/components/OrdersOption/index.tsx +22 -22
  36. package/themes/business/src/components/PreviousMessages/FooterMessageComponent.tsx +103 -0
  37. package/themes/business/src/components/PreviousMessages/index.tsx +97 -55
  38. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +17 -12
  39. package/themes/business/src/components/PreviousOrders/OrderList.tsx +93 -0
  40. package/themes/business/src/components/PreviousOrders/OrdersGroupedItem.tsx +1 -1
  41. package/themes/business/src/components/PreviousOrders/index.tsx +198 -221
  42. package/themes/business/src/components/ProductItemAccordion/index.tsx +7 -1
  43. package/themes/business/src/components/ReviewCustomer/index.tsx +18 -13
  44. package/themes/business/src/components/StoresList/index.tsx +3 -4
  45. package/themes/business/src/components/UserProfileForm/index.tsx +14 -15
  46. package/themes/business/src/components/shared/OModal.tsx +16 -9
  47. package/themes/business/src/types/index.tsx +25 -10
  48. package/themes/business/src/utils/index.tsx +29 -2
  49. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  50. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  51. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  52. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  53. package/themes/kiosk/src/components/Intro/index.tsx +16 -1
  54. package/themes/kiosk/src/components/LoginForm/index.tsx +7 -9
  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 +2 -2
  59. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  60. package/themes/original/index.tsx +1 -1
  61. package/themes/original/src/components/AddressDetails/index.tsx +19 -3
  62. package/themes/original/src/components/AddressForm/index.tsx +35 -17
  63. package/themes/original/src/components/AddressList/index.tsx +5 -8
  64. package/themes/original/src/components/AnalyticsSegment/index.tsx +193 -10
  65. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  66. package/themes/original/src/components/AppleLogin/styles.tsx +3 -1
  67. package/themes/original/src/components/BusinessBasicInformation/index.tsx +73 -37
  68. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +10 -12
  69. package/themes/original/src/components/BusinessController/index.tsx +35 -44
  70. package/themes/original/src/components/BusinessController/styles.tsx +12 -5
  71. package/themes/original/src/components/BusinessFeaturedController/index.tsx +21 -54
  72. package/themes/original/src/components/BusinessFeaturedController/styles.tsx +8 -0
  73. package/themes/original/src/components/BusinessInformation/index.tsx +140 -85
  74. package/themes/original/src/components/BusinessItemAccordion/index.tsx +15 -20
  75. package/themes/original/src/components/BusinessListingSearch/index.tsx +347 -341
  76. package/themes/original/src/components/BusinessListingSearch/styles.tsx +0 -18
  77. package/themes/original/src/components/BusinessPreorder/index.tsx +103 -19
  78. package/themes/original/src/components/BusinessProductsCategories/index.tsx +1 -2
  79. package/themes/original/src/components/BusinessProductsList/index.tsx +15 -7
  80. package/themes/original/src/components/BusinessProductsList/styles.tsx +8 -3
  81. package/themes/original/src/components/BusinessProductsListing/UpsellingRedirect.tsx +1 -1
  82. package/themes/original/src/components/BusinessProductsListing/index.tsx +664 -556
  83. package/themes/original/src/components/BusinessProductsListing/styles.tsx +2 -3
  84. package/themes/original/src/components/BusinessReviews/index.tsx +3 -1
  85. package/themes/original/src/components/BusinessesListing/Layout/Original/FlatListBusinessListFooter.tsx +69 -0
  86. package/themes/original/src/components/BusinessesListing/Layout/Original/FlatListBusinessListHeader.tsx +406 -0
  87. package/themes/original/src/components/BusinessesListing/Layout/Original/FlatListBusinessListing.tsx +76 -0
  88. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +38 -405
  89. package/themes/original/src/components/BusinessesListing/index.tsx +0 -1
  90. package/themes/original/src/components/Cart/index.tsx +57 -49
  91. package/themes/original/src/components/CartContent/index.tsx +102 -58
  92. package/themes/original/src/components/CartContent/styles.tsx +6 -6
  93. package/themes/original/src/components/Checkout/index.tsx +277 -33
  94. package/themes/original/src/components/CitiesControl/index.tsx +1 -1
  95. package/themes/original/src/components/CouponControl/index.tsx +10 -3
  96. package/themes/original/src/components/DriverTips/index.tsx +14 -6
  97. package/themes/original/src/components/FacebookLogin/styles.tsx +3 -1
  98. package/themes/original/src/components/Favorite/index.tsx +1 -5
  99. package/themes/original/src/components/GPSButton/index.tsx +6 -4
  100. package/themes/original/src/components/GiftCard/GiftCardUI/index.tsx +8 -3
  101. package/themes/original/src/components/GiftCard/PurchaseGiftCard/index.tsx +42 -5
  102. package/themes/original/src/components/GiftCard/PurchaseGiftCard/styles.tsx +2 -0
  103. package/themes/original/src/components/GiftCard/RedeemGiftCard/index.tsx +86 -10
  104. package/themes/original/src/components/GoogleLogin/styles.tsx +1 -1
  105. package/themes/original/src/components/GoogleMap/index.tsx +63 -7
  106. package/themes/original/src/components/Home/index.tsx +13 -4
  107. package/themes/original/src/components/LastOrder/index.tsx +2 -1
  108. package/themes/original/src/components/LastOrders/index.tsx +2 -1
  109. package/themes/original/src/components/LoginForm/Otp/index.tsx +91 -25
  110. package/themes/original/src/components/LoginForm/index.tsx +64 -34
  111. package/themes/original/src/components/LottieAnimation/index.tsx +88 -63
  112. package/themes/original/src/components/MessageListing/index.tsx +9 -2
  113. package/themes/original/src/components/Messages/index.tsx +15 -4
  114. package/themes/original/src/components/MomentOption/index.tsx +193 -92
  115. package/themes/original/src/components/MomentSelector/index.tsx +1 -1
  116. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +162 -50
  117. package/themes/original/src/components/MultiCheckout/index.tsx +385 -46
  118. package/themes/original/src/components/MultiCheckout/styles.tsx +3 -1
  119. package/themes/original/src/components/MultiOrdersDetails/index.tsx +23 -19
  120. package/themes/original/src/components/MyOrders/index.tsx +15 -4
  121. package/themes/original/src/components/NavBar/index.tsx +20 -13
  122. package/themes/original/src/components/NotFoundSource/index.tsx +14 -10
  123. package/themes/original/src/components/OrderDetails/OrderEta.tsx +76 -0
  124. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +21 -5
  125. package/themes/original/src/components/OrderDetails/index.tsx +50 -38
  126. package/themes/original/src/components/OrderDetails/styles.tsx +0 -1
  127. package/themes/original/src/components/OrderItAgain/index.tsx +3 -1
  128. package/themes/original/src/components/OrderProgress/index.tsx +34 -25
  129. package/themes/original/src/components/OrderSummary/index.tsx +83 -57
  130. package/themes/original/src/components/OrderTypeSelector/index.tsx +5 -6
  131. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +13 -13
  132. package/themes/original/src/components/OrdersOption/index.tsx +43 -20
  133. package/themes/original/src/components/OrdersOption/styles.tsx +1 -1
  134. package/themes/original/src/components/PageBanner/index.tsx +65 -29
  135. package/themes/original/src/components/PageBanner/styles.tsx +0 -3
  136. package/themes/original/src/components/PaymentOptionCard/index.tsx +180 -0
  137. package/themes/original/src/components/PaymentOptionStripe/styles.tsx +3 -0
  138. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  139. package/themes/original/src/components/PaymentOptions/index.tsx +100 -34
  140. package/themes/original/src/components/PhoneInputNumber/index.tsx +18 -4
  141. package/themes/original/src/components/ProductForm/index.tsx +87 -31
  142. package/themes/original/src/components/ProductForm/styles.tsx +3 -3
  143. package/themes/original/src/components/ProductItemAccordion/index.tsx +8 -6
  144. package/themes/original/src/components/ProductOptionSubOption/index.tsx +49 -20
  145. package/themes/original/src/components/ProductOptionSubOption/styles.tsx +10 -9
  146. package/themes/original/src/components/ProfessionalFilter/SingleProfessionalCard/index.tsx +108 -0
  147. package/themes/original/src/components/ProfessionalFilter/index.tsx +20 -50
  148. package/themes/original/src/components/ProfessionalProfile/index.tsx +36 -7
  149. package/themes/original/src/components/Promotions/index.tsx +2 -2
  150. package/themes/original/src/components/Promotions/styles.tsx +3 -1
  151. package/themes/original/src/components/ReviewProducts/index.tsx +16 -7
  152. package/themes/original/src/components/ScheduleAccordion/index.tsx +3 -3
  153. package/themes/original/src/components/ServiceForm/index.tsx +63 -20
  154. package/themes/original/src/components/SignupForm/index.tsx +43 -27
  155. package/themes/original/src/components/SingleOrderCard/index.tsx +42 -19
  156. package/themes/original/src/components/SingleOrderCard/styles.tsx +1 -1
  157. package/themes/original/src/components/SingleProductCard/index.tsx +14 -11
  158. package/themes/original/src/components/SingleProductCard/styles.tsx +8 -3
  159. package/themes/original/src/components/SingleProductReview/styles.tsx +1 -1
  160. package/themes/original/src/components/StripeCardsList/index.tsx +61 -5
  161. package/themes/original/src/components/StripeElementsForm/index.tsx +48 -34
  162. package/themes/original/src/components/StripeElementsForm/naked.tsx +12 -1
  163. package/themes/original/src/components/UpsellingProducts/index.tsx +5 -10
  164. package/themes/original/src/components/UserDetails/index.tsx +3 -1
  165. package/themes/original/src/components/UserFormDetails/index.tsx +78 -9
  166. package/themes/original/src/components/UserFormDetails/styles.tsx +1 -1
  167. package/themes/original/src/components/UserProfile/index.tsx +8 -26
  168. package/themes/original/src/components/UserProfileForm/index.tsx +30 -31
  169. package/themes/original/src/components/UserVerification/index.tsx +55 -50
  170. package/themes/original/src/components/WalletTransactionItem/index.tsx +2 -2
  171. package/themes/original/src/components/WalletTransactions/index.tsx +3 -3
  172. package/themes/original/src/components/Wallets/index.tsx +52 -62
  173. package/themes/original/src/components/Wallets/styles.tsx +2 -4
  174. package/themes/original/src/components/shared/OButton.tsx +3 -3
  175. package/themes/original/src/components/shared/OInput.tsx +4 -5
  176. package/themes/original/src/components/shared/OModal.tsx +3 -3
  177. package/themes/original/src/types/index.tsx +37 -10
  178. package/themes/original/src/utils/index.tsx +185 -13
  179. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
  180. package/src/navigators/BottomNavigator.tsx +0 -117
  181. package/src/navigators/CheckoutNavigator.tsx +0 -66
  182. package/src/navigators/HomeNavigator.tsx +0 -202
  183. package/src/navigators/NavigationRef.tsx +0 -7
  184. package/src/navigators/RootNavigator.tsx +0 -269
  185. package/src/pages/Account.tsx +0 -34
  186. package/src/pages/AddressForm.tsx +0 -62
  187. package/src/pages/AddressList.tsx +0 -24
  188. package/src/pages/BusinessProductsList.tsx +0 -81
  189. package/src/pages/BusinessesListing.tsx +0 -43
  190. package/src/pages/CartList.tsx +0 -49
  191. package/src/pages/Checkout.tsx +0 -101
  192. package/src/pages/ForgotPassword.tsx +0 -24
  193. package/src/pages/Help.tsx +0 -23
  194. package/src/pages/HelpAccountAndPayment.tsx +0 -23
  195. package/src/pages/HelpGuide.tsx +0 -23
  196. package/src/pages/HelpOrder.tsx +0 -23
  197. package/src/pages/Home.tsx +0 -36
  198. package/src/pages/IntroductoryTutorial.tsx +0 -170
  199. package/src/pages/Login.tsx +0 -47
  200. package/src/pages/MomentOption.tsx +0 -30
  201. package/src/pages/MultiCheckout.tsx +0 -31
  202. package/src/pages/MultiOrdersDetails.tsx +0 -27
  203. package/src/pages/MyOrders.tsx +0 -40
  204. package/src/pages/NetworkError.tsx +0 -24
  205. package/src/pages/NotFound.tsx +0 -22
  206. package/src/pages/OrderDetails.tsx +0 -25
  207. package/src/pages/ProductDetails.tsx +0 -55
  208. package/src/pages/Profile.tsx +0 -36
  209. package/src/pages/ReviewDriver.tsx +0 -30
  210. package/src/pages/ReviewOrder.tsx +0 -32
  211. package/src/pages/ReviewProducts.tsx +0 -30
  212. package/src/pages/Sessions.tsx +0 -22
  213. package/src/pages/Signup.tsx +0 -53
  214. package/src/pages/SpinnerLoader.tsx +0 -10
  215. package/src/pages/Splash.tsx +0 -21
@@ -1,8 +1,10 @@
1
- import React, { useState, useEffect } from 'react';
2
- import { View, StyleSheet, TouchableOpacity, Platform, I18nManager, Vibration } from 'react-native';
1
+ import React, { useState, useEffect, useCallback } from 'react';
2
+ import { View, StyleSheet, TouchableOpacity, Platform, I18nManager, ScrollView } from 'react-native';
3
3
  import { initStripe, useConfirmPayment } from '@stripe/stripe-react-native';
4
+ import NativeStripeSdk from '@stripe/stripe-react-native/src/NativeStripeSdk'
4
5
  import Picker from 'react-native-country-picker-modal';
5
6
  import MaterialIcons from 'react-native-vector-icons/MaterialIcons'
7
+ import ReactNativeHapticFeedback from "react-native-haptic-feedback";
6
8
  import {
7
9
  Checkout as CheckoutController,
8
10
  useOrder,
@@ -14,9 +16,10 @@ import {
14
16
  useConfig,
15
17
  useToast,
16
18
  ToastType,
19
+ useEvent
17
20
  } from 'ordering-components/native';
18
21
  import { useTheme } from 'styled-components/native';
19
- import { OText, OIcon, OModal } from '../shared';
22
+ import { OText, OIcon, OModal, OButton } from '../shared';
20
23
 
21
24
  import { AddressDetails } from '../AddressDetails';
22
25
  import { PaymentOptions } from '../PaymentOptions';
@@ -25,6 +28,8 @@ import { NotFoundSource } from '../NotFoundSource';
25
28
  import { UserDetails } from '../UserDetails';
26
29
  import { PaymentOptionWallet } from '../PaymentOptionWallet';
27
30
  import { PlaceSpot } from '../PlaceSpot'
31
+ import { SignupForm } from '../SignupForm'
32
+ import { LoginForm } from '../LoginForm'
28
33
 
29
34
  import {
30
35
  ChContainer,
@@ -44,7 +49,6 @@ import {
44
49
  CartHeader
45
50
  } from './styles';
46
51
  import { Fade, Placeholder, PlaceholderLine } from 'rn-placeholder';
47
-
48
52
  import { FloatingButton } from '../FloatingButton';
49
53
  import { Container } from '../../layouts/Container';
50
54
  import NavBar from '../NavBar';
@@ -52,6 +56,8 @@ import { OrderSummary } from '../OrderSummary';
52
56
  import { getTypesText } from '../../utils';
53
57
  import { CartStoresListing } from '../CartStoresListing';
54
58
  import { PaymentOptionsWebView } from '../../../../../src/components/PaymentOptionsWebView';
59
+ import { DeviceOrientationMethods } from '../../../../../src/hooks/DeviceOrientation'
60
+ const { useDeviceOrientation } = DeviceOrientationMethods
55
61
 
56
62
  const mapConfigs = {
57
63
  mapZoom: 16,
@@ -78,6 +84,7 @@ const CheckoutUI = (props: any) => {
78
84
  placing,
79
85
  cartState,
80
86
  cartUuid,
87
+ loyaltyPlansState,
81
88
  businessDetails,
82
89
  paymethodSelected,
83
90
  handlePaymethodChange,
@@ -88,7 +95,8 @@ const CheckoutUI = (props: any) => {
88
95
  handleChangeDeliveryOption,
89
96
  currency,
90
97
  merchantId,
91
- setPlaceSpotNumber
98
+ setPlaceSpotNumber,
99
+ maxDate
92
100
  } = props
93
101
 
94
102
  const theme = useTheme();
@@ -128,12 +136,17 @@ const CheckoutUI = (props: any) => {
128
136
 
129
137
  const [, { showToast }] = useToast();
130
138
  const [, t] = useLanguage();
131
- const [{ user, token }] = useSession();
139
+ const [{ user, token }, { login }] = useSession();
132
140
  const [ordering] = useApi()
133
141
  const [{ configs }] = useConfig();
134
142
  const [{ parsePrice, parseDate }] = useUtils();
135
143
  const [{ options, carts, loading }, { confirmCart }] = useOrder();
136
144
  const [validationFields] = useValidationFields();
145
+ const [events] = useEvent()
146
+ const [orientationState] = useDeviceOrientation();
147
+ const [isReadMore, setIsReadMore] = useState(false)
148
+ const [lengthMore, setLengthMore] = useState(false)
149
+ const WIDTH_SCREEN = orientationState?.dimensions?.width
137
150
 
138
151
  const [errorCash, setErrorCash] = useState(false);
139
152
  const [userErrors, setUserErrors] = useState<any>([]);
@@ -145,7 +158,14 @@ const CheckoutUI = (props: any) => {
145
158
  const [webviewPaymethod, setWebviewPaymethod] = useState<any>(null)
146
159
  const [isOpen, setIsOpen] = useState(false)
147
160
  const [requiredFields, setRequiredFields] = useState<any>([])
148
-
161
+ const [openModal, setOpenModal] = useState({ login: false, signup: false, isGuest: false })
162
+ const [allowedGuest, setAllowedGuest] = useState(false)
163
+ const [placeByMethodPay, setPlaceByMethodPay] = useState(false)
164
+ const [methodPaySupported, setMethodPaySupported] = useState({ enabled: false, message: null, loading: true })
165
+ const [paymethodClicked, setPaymethodClicked] = useState<any>(null)
166
+ const [cardList, setCardList] = useState<any>({ cards: [], loading: false, error: null })
167
+ const cardsMethods = ['credomatic']
168
+ const stripePaymethods: any = ['stripe', 'stripe_direct', 'stripe_connect', 'stripe_redirect']
149
169
  const placeSpotTypes = [3, 4, 5]
150
170
  const placeSpotsEnabled = placeSpotTypes.includes(options?.type)
151
171
  const isGiftCardCart = !cart?.business_id
@@ -154,24 +174,40 @@ const CheckoutUI = (props: any) => {
154
174
  const isWalletCreditPointsEnabled = businessConfigs.find((config: any) => config.key === 'wallet_credit_point_enabled')?.value === '1'
155
175
  const isWalletEnabled = configs?.cash_wallet?.value && configs?.wallet_enabled?.value === '1' && (isWalletCashEnabled || isWalletCreditPointsEnabled)
156
176
  const isBusinessChangeEnabled = configs?.cart_change_business_validation?.value === '1'
157
- const isChewLayout = theme?.header?.components?.layout?.type === 'chew'
177
+ const isChewLayout = theme?.header?.components?.layout?.type?.toLowerCase() === 'chew'
158
178
  const hideBusinessAddress = theme?.checkout?.components?.business?.components?.address?.hidden
159
179
  const hideBusinessDetails = theme?.checkout?.components?.business?.hidden
160
180
  const hideBusinessMap = theme?.checkout?.components?.business?.components?.map?.hidden
161
181
  const hideCustomerDetails = theme?.checkout?.components?.customer?.hidden
162
182
 
183
+ const creditPointPlan = loyaltyPlansState?.result?.find((loyal: any) => loyal.type === 'credit_point')
184
+ const creditPointPlanOnBusiness = creditPointPlan?.businesses?.find((b: any) => b.business_id === cart?.business_id && b.accumulates)
185
+ const methodsPay = ['google_pay', 'apple_pay']
186
+
163
187
  const isPreOrder = configs?.preorder_status_enabled?.value === '1'
164
188
  const subtotalWithTaxes = cart?.taxes?.reduce((acc: any, item: any) => {
165
189
  if (item?.type === 1)
166
190
  return acc = acc + item?.summary?.tax
167
191
  return acc = acc
168
192
  }, cart?.subtotal)
193
+
194
+ const validateCommentsCartField = validationFields?.fields?.checkout?.comments?.enabled && validationFields?.fields?.checkout?.comments?.required && (cart?.comment === null || cart?.comment?.trim().length === 0)
195
+ const validateZipcodeCard = validationFields?.fields?.card?.zipcode?.enabled &&
196
+ validationFields?.fields?.card?.zipcode?.required &&
197
+ paymethodSelected?.data?.card &&
198
+ !paymethodSelected?.data?.card?.zipcode &&
199
+ paymethodSelected?.gateway === 'stripe'
200
+
169
201
  const isDisabledButtonPlace = loading || !cart?.valid || (!paymethodSelected && cart?.balance > 0) ||
170
202
  placing || errorCash || subtotalWithTaxes < cart?.minimum ||
203
+ (cardsMethods.includes(paymethodSelected?.gateway) && cardList?.cards?.length === 0) ||
171
204
  (options.type === 1 &&
172
205
  validationFields?.fields?.checkout?.driver_tip?.enabled &&
173
206
  validationFields?.fields?.checkout?.driver_tip?.required &&
174
- (Number(cart?.driver_tip) <= 0))
207
+ (Number(cart?.driver_tip) <= 0)) ||
208
+ (validateCommentsCartField) ||
209
+ (validateZipcodeCard)
210
+ || (methodsPay.includes(paymethodSelected?.gateway) && (!methodPaySupported.enabled || methodPaySupported.loading))
175
211
 
176
212
  const driverTipsOptions = typeof configs?.driver_tip_options?.value === 'string'
177
213
  ? JSON.parse(configs?.driver_tip_options?.value) || []
@@ -181,6 +217,9 @@ const CheckoutUI = (props: any) => {
181
217
 
182
218
  const cartsWithProducts = carts && Object.values(carts).filter((cart: any) => cart.products.length) || null
183
219
 
220
+ const isSandboxCredomatic = configs?.credomatic_integration_sandbox?.value === '1'
221
+ const credomaticKeyId = isSandboxCredomatic ? configs?.credomatic_integration_public_sandbox_key?.value : configs?.credomatic_integration_public_production_key?.value
222
+ const credomaticUrl = `https://integrations.ordering.co/credomatic/front/auth_mobile.html?title=${t('CREDOMATIC_PAYMENT', 'Credomatic payment')}&body=${t('CREDOMATIC_PROCESSING', 'Processing transaction')}`
184
223
  const deliveryOptions = instructionsOptions?.result && instructionsOptions?.result?.filter((option: any) => option?.enabled)?.map((option: any) => {
185
224
  return {
186
225
  value: option?.id, key: option?.id, label: t(option?.name.toUpperCase().replace(/\s/g, '_'), option?.name)
@@ -193,10 +232,36 @@ const CheckoutUI = (props: any) => {
193
232
  }
194
233
  }
195
234
 
235
+ const vibrateApp = (impact?: string) => {
236
+ const options = {
237
+ enableVibrateFallback: true,
238
+ ignoreAndroidSystemSettings: false
239
+ };
240
+ ReactNativeHapticFeedback.trigger(impact || "impactLight", options);
241
+ }
242
+
243
+ const handleSuccessSignup = (user: any) => {
244
+ login({
245
+ user,
246
+ token: user?.session?.access_token
247
+ })
248
+ openModal?.isGuest && handlePlaceOrderAsGuest()
249
+ setOpenModal({ ...openModal, signup: false, isGuest: false })
250
+ }
251
+
252
+ const handleSuccessLogin = (user: any) => {
253
+ if (user) setOpenModal({ ...openModal, login: false })
254
+ }
255
+
196
256
  const handlePlaceOrder = (confirmPayment: any, forcePlace: boolean = false) => {
197
- if (!userErrors.length && !requiredFields?.length || forcePlace) {
198
- Vibration.vibrate()
199
- handlerClickPlaceOrder && handlerClickPlaceOrder(null, null, confirmPayment)
257
+ if (stripePaymethods.includes(paymethodSelected?.gateway) && user?.guest_id) {
258
+ setOpenModal({ ...openModal, signup: true, isGuest: true })
259
+ return
260
+ }
261
+
262
+ if (!userErrors.length && (!requiredFields?.length || allowedGuest) || forcePlace) {
263
+ vibrateApp()
264
+ handlerClickPlaceOrder && handlerClickPlaceOrder(null, { isNative: true }, confirmPayment, NativeStripeSdk?.dismissPlatformPay)
200
265
  return
201
266
  }
202
267
  if (requiredFields?.length) {
@@ -211,6 +276,11 @@ const CheckoutUI = (props: any) => {
211
276
  setIsUserDetailsEdit(true)
212
277
  }
213
278
 
279
+ const handlePlaceOrderAsGuest = () => {
280
+ setIsOpen(false)
281
+ handlerClickPlaceOrder && handlerClickPlaceOrder()
282
+ }
283
+
214
284
  const handlePaymentMethodClick = (paymethod: any) => {
215
285
  setShowGateway({ closedByUser: false, open: true })
216
286
  setWebviewPaymethod(paymethod)
@@ -229,7 +299,7 @@ const CheckoutUI = (props: any) => {
229
299
  const checkValidationFields = () => {
230
300
  setUserErrors([])
231
301
  const errors = []
232
- const notFields = ['coupon', 'driver_tip', 'mobile_phone', 'address', 'zipcode', 'address_notes']
302
+ const notFields = ['coupon', 'driver_tip', 'mobile_phone', 'address', 'zipcode', 'address_notes', 'comments']
233
303
  const _requiredFields: any = []
234
304
 
235
305
  Object.values(validationFields?.fields?.checkout).map((field: any) => {
@@ -277,7 +347,7 @@ const CheckoutUI = (props: any) => {
277
347
  useEffect(() => {
278
348
  if (cart?.products?.length === 0) {
279
349
  if (cart?.business?.slug) {
280
- onNavigationRedirect('Business', { store: cart?.business?.slug, header: null, logo: null })
350
+ onNavigationRedirect('Business', { store: cart?.business?.slug, header: null, logo: null, fromMulti: props.fromMulti })
281
351
  } else {
282
352
  onNavigationRedirect('Wallets')
283
353
  }
@@ -303,6 +373,24 @@ const CheckoutUI = (props: any) => {
303
373
  )
304
374
  }
305
375
 
376
+ useEffect(() => {
377
+ cart && events.emit('checkout_started', cart)
378
+ }, [])
379
+
380
+ useEffect(() => {
381
+ if (cart?.paymethod_data?.gateway === 'credomatic') {
382
+ if (cart?.paymethod_data?.status === 2) {
383
+ setShowGateway({ ...showGateway, open: true })
384
+ } else if (cart?.paymethod_data?.gateway === 'credomatic' && cart?.paymethod_data?.status === 4) {
385
+ setShowGateway({ ...showGateway, open: false })
386
+ }
387
+ }
388
+ }, [cart?.paymethod_data])
389
+
390
+ const onTextLayout = useCallback((e: any) => {
391
+ setLengthMore((e.nativeEvent.lines.length == 3 && e.nativeEvent.lines[2].width > WIDTH_SCREEN * .76) || e.nativeEvent.lines.length > 3)
392
+ }, [])
393
+
306
394
  return (
307
395
  <>
308
396
  <Container noPadding>
@@ -310,11 +398,12 @@ const CheckoutUI = (props: any) => {
310
398
  <NavBar
311
399
  title={t('CHECKOUT', 'Checkout')}
312
400
  titleAlign={'center'}
313
- onActionLeft={() => navigation?.canGoBack() && navigation.goBack()}
401
+ onActionLeft={() => onNavigationRedirect('BottomTab', { screen: 'Cart' }, !props.fromMulti)}
314
402
  showCall={false}
315
403
  btnStyle={{ paddingLeft: 0, paddingTop: Platform.OS == 'ios' ? 0 : 2 }}
316
404
  titleWrapStyle={{ paddingHorizontal: 0 }}
317
405
  titleStyle={{ marginRight: 0, marginLeft: 0 }}
406
+ style={{ marginTop: 20 }}
318
407
  />
319
408
  </View>
320
409
  <ChContainer style={styles.pagePadding}>
@@ -393,6 +482,25 @@ const CheckoutUI = (props: any) => {
393
482
  {businessDetails?.business?.address}
394
483
  </OText>
395
484
  )}
485
+ {businessDetails?.business?.address_notes && (
486
+ <>
487
+ <OText
488
+ size={12}
489
+ lineHeight={18}
490
+ numberOfLines={isReadMore ? 20 : 3}
491
+ onTextLayout={onTextLayout}
492
+ >
493
+ {businessDetails?.business?.address_notes}
494
+ </OText>
495
+ {lengthMore && (
496
+ <TouchableOpacity
497
+ onPress={() => setIsReadMore(!isReadMore)}
498
+ >
499
+ <OText size={12} color={theme.colors.primary}>{isReadMore ? t('SHOW_LESS', 'Show less') : t('READ_MORE', 'Read more')}</OText>
500
+ </TouchableOpacity>
501
+ )}
502
+ </>
503
+ )}
396
504
  </View>
397
505
  </>
398
506
  )}
@@ -420,18 +528,46 @@ const CheckoutUI = (props: any) => {
420
528
  <PlaceholderLine height={12} style={{ marginBottom: 20 }} />
421
529
  </Placeholder>
422
530
  ) : (
423
- <UserDetails
424
- isUserDetailsEdit={isUserDetailsEdit}
425
- HeaderTitle={<HeaderTitle text={t('CUSTOMER_DETAILS', 'Customer Details')} mb={0} />}
426
- cartStatus={cart?.status}
427
- businessId={cart?.business_id}
428
- useValidationFields
429
- useDefualtSessionManager
430
- useSessionUser
431
- isCheckout
432
- phoneUpdate={phoneUpdate}
433
- togglePhoneUpdate={togglePhoneUpdate}
434
- />
531
+ (user?.guest_id && !allowedGuest) ? (
532
+ <View>
533
+ <HeaderTitle text={t('CUSTOMER_DETAILS', 'Customer details')} />
534
+ <OButton
535
+ text={t('SIGN_UP', 'Sign up')}
536
+ textStyle={{ color: theme.colors.white }}
537
+ style={{ borderRadius: 7.6, marginTop: 20 }}
538
+ onClick={() => setOpenModal({ ...openModal, signup: true })}
539
+ />
540
+ <OButton
541
+ text={t('LOGIN', 'Login')}
542
+ textStyle={{ color: theme.colors.primary }}
543
+ bgColor={theme.colors.white}
544
+ borderColor={theme.colors.primary}
545
+ style={{ borderRadius: 7.6, marginTop: 20 }}
546
+ onClick={() => setOpenModal({ ...openModal, login: true })}
547
+ />
548
+ <OButton
549
+ text={t('CONTINUE_AS_GUEST', 'Continue as guest')}
550
+ textStyle={{ color: theme.colors.black }}
551
+ bgColor={theme.colors.white}
552
+ borderColor={theme.colors.black}
553
+ style={{ borderRadius: 7.6, marginTop: 20 }}
554
+ onClick={() => setAllowedGuest(true)}
555
+ />
556
+ </View>
557
+ ) : (
558
+ <UserDetails
559
+ isUserDetailsEdit={isUserDetailsEdit}
560
+ HeaderTitle={<HeaderTitle text={t('CUSTOMER_DETAILS', 'Customer Details')} mb={0} />}
561
+ cartStatus={cart?.status}
562
+ businessId={cart?.business_id}
563
+ useValidationFields
564
+ useDefualtSessionManager
565
+ useSessionUser
566
+ isCheckout
567
+ phoneUpdate={phoneUpdate}
568
+ togglePhoneUpdate={togglePhoneUpdate}
569
+ />
570
+ )
435
571
  )}
436
572
  </ChUserDetails>
437
573
  <View style={{ height: 8, backgroundColor: theme.colors.backgroundGray100, marginHorizontal: -40 }} />
@@ -479,7 +615,7 @@ const CheckoutUI = (props: any) => {
479
615
  data: deliveryOptions || [],
480
616
  renderItem: ({ item }: any) => (
481
617
  <TouchableOpacity
482
- onPress={() => changeDeliveryOption(item.value)}
618
+ onPress={() => !!cart?.uuid && changeDeliveryOption(item.value)}
483
619
  disabled={
484
620
  deliveryOptionSelected === item.value
485
621
  }
@@ -528,7 +664,7 @@ const CheckoutUI = (props: any) => {
528
664
  ) : (
529
665
  <AddressDetails
530
666
  navigation={navigation}
531
- location={businessDetails?.business?.location}
667
+ location={options?.address?.location}
532
668
  businessLogo={businessDetails?.business?.logo}
533
669
  isCartPending={cart?.status === 2}
534
670
  uuid={cartUuid}
@@ -597,6 +733,16 @@ const CheckoutUI = (props: any) => {
597
733
  handlePaymentMethodClickCustom={handlePaymentMethodClick}
598
734
  handlePlaceOrder={handlePlaceOrder}
599
735
  merchantId={merchantId}
736
+ setMethodPaySupported={setMethodPaySupported}
737
+ methodPaySupported={methodPaySupported}
738
+ placeByMethodPay={placeByMethodPay}
739
+ setPlaceByMethodPay={setPlaceByMethodPay}
740
+ cardList={cardList}
741
+ setCardList={setCardList}
742
+ requiredFields={requiredFields}
743
+ openUserModal={setIsOpen}
744
+ paymethodClicked={paymethodClicked}
745
+ setPaymethodClicked={setPaymethodClicked}
600
746
  />
601
747
  </ChPaymethods>
602
748
  </ChSection>
@@ -606,6 +752,7 @@ const CheckoutUI = (props: any) => {
606
752
  <WalletPaymentOptionContainer>
607
753
  <PaymentOptionWallet
608
754
  cart={cart}
755
+ loyaltyPlansState={loyaltyPlansState}
609
756
  businessId={cart?.business_id}
610
757
  businessConfigs={businessDetails?.business?.configs}
611
758
  />
@@ -675,6 +822,12 @@ const CheckoutUI = (props: any) => {
675
822
  isCartPending={cart?.status === 2}
676
823
  onNavigationRedirect={onNavigationRedirect}
677
824
  placeSpotTypes={placeSpotTypes}
825
+ businessConfigs={businessConfigs}
826
+ maxDate={maxDate}
827
+ loyaltyRewardRate={
828
+ creditPointPlanOnBusiness?.accumulation_rate ??
829
+ (!!creditPointPlanOnBusiness && creditPointPlan?.accumulation_rate) ?? 0
830
+ }
678
831
  />
679
832
  </>
680
833
  )}
@@ -684,7 +837,7 @@ const CheckoutUI = (props: any) => {
684
837
 
685
838
  {!cartState.loading && cart && (
686
839
  <View>
687
- <ChErrors style={{ marginBottom: 10 }}>
840
+ <ChErrors style={{ marginBottom: Platform.OS === 'ios' ? 35 : 10 }}>
688
841
  {!cart?.valid_address && cart?.status !== 2 && (
689
842
  <OText
690
843
  color={theme.colors.error}
@@ -711,6 +864,14 @@ const CheckoutUI = (props: any) => {
711
864
  {t('WARNING_INVALID_PRODUCTS_CHECKOUT', 'To continue with your checkout, please remove from your cart the products that are not available.')}
712
865
  </OText>
713
866
  )}
867
+ {cart?.valid_preorder !== undefined && !cart?.valid_preorder && (
868
+ <OText
869
+ color={theme.colors.error}
870
+ size={12}
871
+ >
872
+ {t('INVALID_CART_MOMENT', 'Selected schedule time is invalid, please select a schedule into the business schedule interval.')}
873
+ </OText>
874
+ )}
714
875
  {options.type === 1 &&
715
876
  validationFields?.fields?.checkout?.driver_tip?.enabled &&
716
877
  validationFields?.fields?.checkout?.driver_tip?.required &&
@@ -722,6 +883,24 @@ const CheckoutUI = (props: any) => {
722
883
  {t('WARNING_INVALID_DRIVER_TIP', 'Driver Tip is required.')}
723
884
  </OText>
724
885
  )}
886
+
887
+ {validateCommentsCartField && (
888
+ <OText
889
+ color={theme.colors.error}
890
+ size={12}
891
+ >
892
+ {t('WARNING_INVALID_CART_COMMENTS', 'Cart comments is required.')}
893
+ </OText>
894
+ )}
895
+
896
+ {validateZipcodeCard && (
897
+ <OText
898
+ color={theme.colors.error}
899
+ size={12}
900
+ >
901
+ {t('WARNING_CARD_ZIPCODE_REQUIRED', 'Your card selected has not zipcode')}
902
+ </OText>
903
+ )}
725
904
  </ChErrors>
726
905
  </View>
727
906
  )}
@@ -754,18 +933,59 @@ const CheckoutUI = (props: any) => {
754
933
  togglePhoneUpdate={togglePhoneUpdate}
755
934
  requiredFields={requiredFields}
756
935
  hideUpdateButton
936
+ handlePlaceOrderAsGuest={handlePlaceOrderAsGuest}
757
937
  onClose={() => {
758
938
  setIsOpen(false)
759
- handlePlaceOrder(null, true)
939
+ if (paymethodClicked) {
940
+ setPaymethodClicked({
941
+ ...paymethodClicked,
942
+ confirmed: true
943
+ })
944
+ } else {
945
+ handlePlaceOrder(null, true)
946
+ }
760
947
  }}
948
+ setIsOpen={setIsOpen}
761
949
  />
762
950
  </View>
763
951
  </OModal>
952
+ <OModal
953
+ open={openModal.signup}
954
+ onClose={() => setOpenModal({ ...openModal, signup: false, isGuest: false })}
955
+ >
956
+ <ScrollView style={{ paddingHorizontal: 20, width: '100%' }}>
957
+ <SignupForm
958
+ handleSuccessSignup={handleSuccessSignup}
959
+ isGuest
960
+ signupButtonText={t('SIGNUP', 'Signup')}
961
+ useSignupByEmail
962
+ useChekoutFileds
963
+ />
964
+ </ScrollView>
965
+ </OModal>
966
+ <OModal
967
+ open={openModal.login}
968
+ onClose={() => setOpenModal({ ...openModal, login: false })}
969
+ >
970
+ <ScrollView style={{ paddingHorizontal: 20, width: '100%' }}>
971
+ <LoginForm
972
+ handleSuccessLogin={handleSuccessLogin}
973
+ isGuest
974
+ loginButtonText={t('LOGIN', 'Login')}
975
+ loginButtonBackground={theme.colors.primary}
976
+ />
977
+ </ScrollView>
978
+ </OModal>
764
979
  </ChContainer>
765
980
  </Container>
766
981
  {!cartState.loading && cart && cart?.status !== 2 && (
767
982
  <FloatingButton
768
- handleClick={isDisabledButtonPlace ? () => Vibration.vibrate() : () => handlePlaceOrder(null)}
983
+ handleClick={
984
+ isDisabledButtonPlace
985
+ ? () => vibrateApp()
986
+ : methodsPay.includes(paymethodSelected?.gateway)
987
+ ? () => setPlaceByMethodPay(true)
988
+ : () => handlePlaceOrder(null)}
769
989
  isSecondaryBtn={isDisabledButtonPlace}
770
990
  disabled={isDisabledButtonPlace}
771
991
  btnText={subtotalWithTaxes >= cart?.minimum
@@ -808,6 +1028,29 @@ const CheckoutUI = (props: any) => {
808
1028
  locationId={'L1NGAY5M6KJRX'}
809
1029
  />
810
1030
  )}
1031
+ {cart?.paymethod_data?.gateway === 'credomatic' && cart?.paymethod_data?.status === 2 && showGateway.open && (
1032
+ <PaymentOptionsWebView
1033
+ title={t('CREDOMATIC_PAYMENT', 'Credomatic payment')}
1034
+ onNavigationRedirect={onNavigationRedirect}
1035
+ uri={credomaticUrl}
1036
+ user={user}
1037
+ cart={cart}
1038
+ additionalParams={{
1039
+ type: 'auth',
1040
+ key_id: credomaticKeyId,
1041
+ hash: cart?.paymethod_data?.result?.hash,
1042
+ time: cart?.paymethod_data?.result?.time,
1043
+ amount: cart?.total,
1044
+ orderid: cart?.uuid,
1045
+ ccnumber: cardList?.cards?.[0]?.number,
1046
+ ccexp: cardList?.cards?.[0]?.expiryString,
1047
+ cvv: cardList?.cards?.[0]?.cvc,
1048
+ redirect: credomaticUrl
1049
+ }}
1050
+ webviewPaymethod={webviewPaymethod}
1051
+ setShowGateway={setShowGateway}
1052
+ />
1053
+ )}
811
1054
  </>
812
1055
  )
813
1056
  }
@@ -834,7 +1077,8 @@ export const Checkout = (props: any) => {
834
1077
  const getOrder = async (cartId: any) => {
835
1078
  try {
836
1079
  let result: any = {}
837
- const cart = orderState?.carts.find((cart: any) => cart.uuid === cartId)
1080
+ const cartsWithProducts = orderState?.carts && (Object.values(orderState?.carts)?.filter(cart => cart?.products && cart?.products?.length) || null)
1081
+ const cart = cartsWithProducts?.find((cart: any) => cart.uuid === cartId)
838
1082
  if (cart) {
839
1083
  result = { ...cart }
840
1084
  } else {
@@ -47,7 +47,7 @@ export const CitiesControl = (props: any) => {
47
47
  return (
48
48
  <Container height={height - top - bottom - 60 - (isKeyboardShow ? 250 : 0)}>
49
49
  <View>
50
- {cities?.map((city: any) => (
50
+ {cities?.map((city: any) => city?.enabled && (
51
51
  <CityElement
52
52
  key={city?.id}
53
53
  activeOpacity={1}
@@ -1,6 +1,6 @@
1
1
  import React, { useEffect } from 'react';
2
2
  import { StyleSheet, Alert, Text } from 'react-native';
3
- import { CouponControl as CouponController, useLanguage } from 'ordering-components/native';
3
+ import { CouponControl as CouponController, useLanguage, useEvent } from 'ordering-components/native';
4
4
  import { useTheme } from 'styled-components/native';
5
5
  import {
6
6
  CContainer,
@@ -18,11 +18,13 @@ const CouponControlUI = (props: any) => {
18
18
  handleRemoveCouponClick,
19
19
  onChangeInputCoupon,
20
20
  confirm,
21
- setConfirm
21
+ setConfirm,
22
+ cart
22
23
  } = props
23
24
 
24
25
  const [, t] = useLanguage()
25
26
  const theme = useTheme();
27
+ const [events] = useEvent()
26
28
 
27
29
  const styles = StyleSheet.create({
28
30
  inputsStyle: {
@@ -45,6 +47,11 @@ const CouponControlUI = (props: any) => {
45
47
  setConfirm({ ...confirm, open: false, error: false })
46
48
  }
47
49
 
50
+ const onButtonApplyClick = () => {
51
+ events.emit('coupon_entered', { ...cart, coupon: couponInput })
52
+ handleButtonApplyClick()
53
+ }
54
+
48
55
  useEffect(() => {
49
56
  if (confirm.content) {
50
57
  Alert.alert(
@@ -94,7 +101,7 @@ const CouponControlUI = (props: any) => {
94
101
  inputStyle={{ fontSize: 12 }}
95
102
  />
96
103
  <OButton
97
- onClick={() => handleButtonApplyClick()}
104
+ onClick={() => onButtonApplyClick()}
98
105
  bgColor={theme.colors.primary}
99
106
  borderColor={theme.colors.primary}
100
107
  textStyle={{ color: 'white', fontSize: 12 }}
@@ -22,8 +22,10 @@ const DriverTipsUI = (props: any) => {
22
22
  const {
23
23
  driverTip,
24
24
  driverTipsOptions,
25
- optionSelected,
25
+ isMulti,
26
+ isLoading,
26
27
  cart,
28
+ carts,
27
29
  isDriverTipUseCustom,
28
30
  handlerChangeOption,
29
31
  isFixedPrice
@@ -33,7 +35,7 @@ const DriverTipsUI = (props: any) => {
33
35
  const theme = useTheme();
34
36
  const [, t] = useLanguage();
35
37
  const [{ configs }] = useConfig();
36
- const [customTip, setCustomTip] = useState((isDriverTipUseCustom && !driverTipsOptions.includes(driverTip)) ?? false)
38
+ const [customTip, setCustomTip] = useState((!isMulti && isDriverTipUseCustom && !driverTipsOptions.includes(driverTip)) ?? false)
37
39
  const currentTip = customTip ? parseFloat(driverTip || 0) > 0 : (!customTip && !driverTipsOptions.includes(driverTip) && parseFloat(driverTip || 0)) > 0
38
40
  const [value, setvalue] = useState('');
39
41
 
@@ -64,6 +66,10 @@ const DriverTipsUI = (props: any) => {
64
66
  setvalue(val)
65
67
  }
66
68
 
69
+ const multiCartTipsAmmout = carts?.reduce((total: any, cart: any) => {
70
+ return total + parseFloat(cart?.driver_tip || 0)
71
+ }, 0)
72
+
67
73
  return (
68
74
  <DTContainer>
69
75
  <DTLabel>
@@ -74,8 +80,10 @@ const DriverTipsUI = (props: any) => {
74
80
  <TouchableOpacity
75
81
  key={i}
76
82
  onPress={() => {
77
- handlerChangeOption(option)
78
- setCustomTip(false)
83
+ if (!isLoading) {
84
+ handlerChangeOption(option)
85
+ setCustomTip(false)
86
+ }
79
87
  }}
80
88
  >
81
89
  <DTCard
@@ -90,7 +98,7 @@ const DriverTipsUI = (props: any) => {
90
98
  ))}
91
99
  {isDriverTipUseCustom && (
92
100
  <TouchableOpacity
93
- onPress={() => setCustomTip(true)}
101
+ onPress={() => { !isLoading && setCustomTip(true) }}
94
102
  >
95
103
  <DTCard
96
104
  style={style.semicircle}
@@ -138,7 +146,7 @@ const DriverTipsUI = (props: any) => {
138
146
  style={{ marginTop: 10, textAlign: 'center' }}
139
147
  >
140
148
  {t('CURRENT_DRIVER_TIP_AMOUNT', 'Current driver tip amount')}{!isFixedPrice &&
141
- ` (${driverTip}%)`}: {isFixedPrice ? parsePrice(driverTip) : parsePrice(cart?.driver_tip)}
149
+ ` (${driverTip}%)`}: {isFixedPrice ? parsePrice(multiCartTipsAmmout ?? driverTip) : parsePrice(multiCartTipsAmmout ?? cart?.driver_tip)}
142
150
  </OText>
143
151
  )}
144
152
  </DTContainer>
@@ -1,6 +1,8 @@
1
1
  import styled from 'styled-components/native'
2
2
 
3
- export const Container = styled.View``
3
+ export const Container = styled.View`
4
+ margin-bottom: 20px;
5
+ `
4
6
 
5
7
  export const FacebookButton = styled.TouchableOpacity`
6
8
  background-color: #FFFFFF;