ordering-ui-react-native 0.18.0 → 0.18.1-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 (263) hide show
  1. package/package.json +9 -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 +0 -20
  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 +7 -2
  13. package/themes/business/index.tsx +4 -0
  14. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +36 -26
  15. package/themes/business/src/components/BusinessController/index.tsx +19 -17
  16. package/themes/business/src/components/BusinessProductList/AccordionDropdown.tsx +63 -0
  17. package/themes/business/src/components/BusinessProductList/IterateCategories.tsx +108 -0
  18. package/themes/business/src/components/BusinessProductList/ProductList.tsx +196 -0
  19. package/themes/business/src/components/BusinessProductList/index.tsx +196 -0
  20. package/themes/business/src/components/BusinessProductList/styles.tsx +10 -0
  21. package/themes/business/src/components/Chat/index.tsx +163 -123
  22. package/themes/business/src/components/DriverMap/index.tsx +17 -6
  23. package/themes/business/src/components/DriverSchedule/index.tsx +45 -8
  24. package/themes/business/src/components/FloatingButton/index.tsx +34 -31
  25. package/themes/business/src/components/GoogleMap/index.tsx +58 -57
  26. package/themes/business/src/components/LoginForm/index.tsx +5 -2
  27. package/themes/business/src/components/MapView/index.tsx +14 -10
  28. package/themes/business/src/components/MessagesOption/index.tsx +22 -94
  29. package/themes/business/src/components/NewOrderNotification/index.tsx +123 -96
  30. package/themes/business/src/components/NotFoundSource/index.tsx +2 -2
  31. package/themes/business/src/components/OrderDetails/Business.tsx +1 -1
  32. package/themes/business/src/components/OrderDetails/Delivery.tsx +205 -12
  33. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +91 -43
  34. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +87 -66
  35. package/themes/business/src/components/OrderDetailsLogistic/index.tsx +200 -0
  36. package/themes/business/src/components/OrderDetailsLogistic/styles.tsx +5 -0
  37. package/themes/business/src/components/OrderMessage/index.tsx +19 -18
  38. package/themes/business/src/components/OrderSummary/index.tsx +114 -123
  39. package/themes/business/src/components/OrdersListManager/index.tsx +7 -2
  40. package/themes/business/src/components/OrdersListManager/utils.tsx +1 -1
  41. package/themes/business/src/components/OrdersOption/index.tsx +60 -47
  42. package/themes/business/src/components/PreviousMessages/FooterMessageComponent.tsx +103 -0
  43. package/themes/business/src/components/PreviousMessages/index.tsx +97 -55
  44. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +21 -29
  45. package/themes/business/src/components/PreviousOrders/OrderList.tsx +93 -0
  46. package/themes/business/src/components/PreviousOrders/OrdersGroupedItem.tsx +1 -1
  47. package/themes/business/src/components/PreviousOrders/index.tsx +198 -221
  48. package/themes/business/src/components/PreviousOrders/styles.tsx +10 -0
  49. package/themes/business/src/components/ProductItemAccordion/index.tsx +7 -1
  50. package/themes/business/src/components/ReviewCustomer/index.tsx +18 -13
  51. package/themes/business/src/components/SearchBar/index.tsx +2 -1
  52. package/themes/business/src/components/StoresList/index.tsx +6 -5
  53. package/themes/business/src/components/UserProfileForm/index.tsx +14 -15
  54. package/themes/business/src/components/WebsocketStatus/index.tsx +171 -0
  55. package/themes/business/src/components/WebsocketStatus/styles.tsx +28 -0
  56. package/themes/business/src/components/shared/OModal.tsx +16 -9
  57. package/themes/business/src/types/index.tsx +25 -10
  58. package/themes/business/src/utils/index.tsx +29 -2
  59. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  60. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  61. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  62. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  63. package/themes/kiosk/src/components/Intro/index.tsx +16 -1
  64. package/themes/kiosk/src/components/LoginForm/index.tsx +7 -5
  65. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  66. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  67. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  68. package/themes/kiosk/src/components/PhoneInputNumber/index.tsx +2 -2
  69. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  70. package/themes/original/index.tsx +7 -3
  71. package/themes/original/src/components/AddressDetails/index.tsx +19 -3
  72. package/themes/original/src/components/AddressForm/index.tsx +33 -15
  73. package/themes/original/src/components/AddressForm/styles.tsx +1 -1
  74. package/themes/original/src/components/AddressList/index.tsx +5 -8
  75. package/themes/original/src/components/AddressList/styles.tsx +4 -4
  76. package/themes/original/src/components/AnalyticsSegment/index.tsx +193 -10
  77. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  78. package/themes/original/src/components/AppleLogin/styles.tsx +3 -1
  79. package/themes/original/src/components/BusinessBasicInformation/index.tsx +74 -38
  80. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +11 -13
  81. package/themes/original/src/components/BusinessController/index.tsx +35 -44
  82. package/themes/original/src/components/BusinessController/styles.tsx +12 -5
  83. package/themes/original/src/components/BusinessFeaturedController/index.tsx +21 -54
  84. package/themes/original/src/components/BusinessFeaturedController/styles.tsx +8 -0
  85. package/themes/original/src/components/BusinessInformation/index.tsx +140 -85
  86. package/themes/original/src/components/BusinessInformation/styles.tsx +2 -2
  87. package/themes/original/src/components/BusinessItemAccordion/index.tsx +25 -26
  88. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/index.tsx +1 -1
  89. package/themes/original/src/components/BusinessListingSearch/index.tsx +346 -341
  90. package/themes/original/src/components/BusinessListingSearch/styles.tsx +1 -19
  91. package/themes/original/src/components/BusinessPreorder/index.tsx +105 -22
  92. package/themes/original/src/components/BusinessPreorder/styles.tsx +14 -0
  93. package/themes/original/src/components/BusinessProductsCategories/index.tsx +2 -3
  94. package/themes/original/src/components/BusinessProductsList/index.tsx +15 -7
  95. package/themes/original/src/components/BusinessProductsList/styles.tsx +8 -3
  96. package/themes/original/src/components/BusinessProductsListing/UpsellingRedirect.tsx +1 -1
  97. package/themes/original/src/components/BusinessProductsListing/index.tsx +162 -39
  98. package/themes/original/src/components/BusinessProductsListing/styles.tsx +4 -5
  99. package/themes/original/src/components/BusinessReviews/index.tsx +4 -2
  100. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +1 -1
  101. package/themes/original/src/components/BusinessesListing/Layout/Appointment/styles.tsx +5 -5
  102. package/themes/original/src/components/BusinessesListing/Layout/Original/FlatListBusinessListFooter.tsx +69 -0
  103. package/themes/original/src/components/BusinessesListing/Layout/Original/FlatListBusinessListHeader.tsx +406 -0
  104. package/themes/original/src/components/BusinessesListing/Layout/Original/FlatListBusinessListing.tsx +76 -0
  105. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +37 -404
  106. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -1
  107. package/themes/original/src/components/BusinessesListing/index.tsx +0 -1
  108. package/themes/original/src/components/Cart/index.tsx +49 -47
  109. package/themes/original/src/components/CartContent/index.tsx +99 -38
  110. package/themes/original/src/components/CartContent/styles.tsx +6 -6
  111. package/themes/original/src/components/CartStoresListing/styles.tsx +2 -2
  112. package/themes/original/src/components/Checkout/index.tsx +324 -43
  113. package/themes/original/src/components/Checkout/styles.tsx +17 -0
  114. package/themes/original/src/components/CitiesControl/index.tsx +1 -1
  115. package/themes/original/src/components/CitiesControl/styles.tsx +1 -1
  116. package/themes/original/src/components/CouponControl/index.tsx +10 -3
  117. package/themes/original/src/components/DatePicker/index.tsx +17 -0
  118. package/themes/original/src/components/DatePicker/styles.tsx +20 -0
  119. package/themes/original/src/components/DriverTips/index.tsx +12 -4
  120. package/themes/original/src/components/FacebookLogin/styles.tsx +3 -1
  121. package/themes/original/src/components/Favorite/index.tsx +4 -9
  122. package/themes/original/src/components/Favorite/styles.tsx +0 -2
  123. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  124. package/themes/original/src/components/GPSButton/index.tsx +7 -5
  125. package/themes/original/src/components/GiftCard/GiftCardUI/index.tsx +8 -3
  126. package/themes/original/src/components/GiftCard/PurchaseGiftCard/index.tsx +42 -5
  127. package/themes/original/src/components/GiftCard/PurchaseGiftCard/styles.tsx +3 -1
  128. package/themes/original/src/components/GiftCard/RedeemGiftCard/index.tsx +84 -8
  129. package/themes/original/src/components/GiftCard/RedeemGiftCard/styles.tsx +1 -1
  130. package/themes/original/src/components/GiftCard/SendGiftCard/styles.tsx +1 -1
  131. package/themes/original/src/components/GoogleLogin/styles.tsx +1 -1
  132. package/themes/original/src/components/GoogleMap/index.tsx +63 -7
  133. package/themes/original/src/components/HighestRatedBusinesses/index.tsx +1 -1
  134. package/themes/original/src/components/HighestRatedBusinesses/styles.tsx +1 -1
  135. package/themes/original/src/components/Home/index.tsx +14 -5
  136. package/themes/original/src/components/LastOrder/index.tsx +2 -1
  137. package/themes/original/src/components/LastOrders/index.tsx +2 -1
  138. package/themes/original/src/components/LoginForm/Otp/index.tsx +91 -25
  139. package/themes/original/src/components/LoginForm/index.tsx +64 -34
  140. package/themes/original/src/components/LottieAnimation/index.tsx +88 -63
  141. package/themes/original/src/components/MessageListing/index.tsx +9 -2
  142. package/themes/original/src/components/Messages/index.tsx +15 -4
  143. package/themes/original/src/components/Messages/styles.tsx +1 -1
  144. package/themes/original/src/components/MomentOption/index.tsx +43 -38
  145. package/themes/original/src/components/MomentSelector/index.tsx +1 -1
  146. package/themes/original/src/components/MultiCart/index.tsx +1 -1
  147. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +161 -49
  148. package/themes/original/src/components/MultiCheckout/index.tsx +348 -70
  149. package/themes/original/src/components/MultiCheckout/styles.tsx +3 -1
  150. package/themes/original/src/components/MultiOrdersDetails/index.tsx +2 -2
  151. package/themes/original/src/components/MyOrders/index.tsx +16 -5
  152. package/themes/original/src/components/NavBar/index.tsx +20 -13
  153. package/themes/original/src/components/NetworkError/styles.tsx +2 -2
  154. package/themes/original/src/components/NotFoundSource/index.tsx +14 -10
  155. package/themes/original/src/components/Notifications/index.tsx +2 -4
  156. package/themes/original/src/components/Notifications/styles.tsx +0 -1
  157. package/themes/original/src/components/OrderDetails/OrderEta.tsx +76 -0
  158. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +22 -6
  159. package/themes/original/src/components/OrderDetails/index.tsx +721 -670
  160. package/themes/original/src/components/OrderDetails/styles.tsx +24 -8
  161. package/themes/original/src/components/OrderItAgain/index.tsx +3 -1
  162. package/themes/original/src/components/OrderProgress/index.tsx +34 -25
  163. package/themes/original/src/components/OrderProgress/styles.tsx +1 -1
  164. package/themes/original/src/components/OrderSummary/index.tsx +62 -57
  165. package/themes/original/src/components/OrderTypeSelector/index.tsx +5 -6
  166. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/styles.tsx +1 -1
  167. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +13 -13
  168. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/styles.tsx +1 -1
  169. package/themes/original/src/components/OrdersOption/index.tsx +44 -21
  170. package/themes/original/src/components/OrdersOption/styles.tsx +2 -2
  171. package/themes/original/src/components/PageBanner/index.tsx +65 -29
  172. package/themes/original/src/components/PageBanner/styles.tsx +0 -3
  173. package/themes/original/src/components/PaymentOptionCard/index.tsx +180 -0
  174. package/themes/original/src/components/PaymentOptionStripe/styles.tsx +3 -0
  175. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  176. package/themes/original/src/components/PaymentOptions/index.tsx +100 -34
  177. package/themes/original/src/components/PhoneInputNumber/index.tsx +18 -4
  178. package/themes/original/src/components/ProductForm/ActionButton.tsx +120 -0
  179. package/themes/original/src/components/ProductForm/ExtraOptions.tsx +56 -0
  180. package/themes/original/src/components/ProductForm/index.tsx +106 -170
  181. package/themes/original/src/components/ProductForm/styles.tsx +3 -3
  182. package/themes/original/src/components/ProductItemAccordion/index.tsx +13 -6
  183. package/themes/original/src/components/ProductOptionSubOption/index.tsx +49 -20
  184. package/themes/original/src/components/ProductOptionSubOption/styles.tsx +10 -9
  185. package/themes/original/src/components/ProfessionalProfile/index.tsx +35 -6
  186. package/themes/original/src/components/ProfessionalProfile/styles.tsx +3 -3
  187. package/themes/original/src/components/Promotions/index.tsx +6 -6
  188. package/themes/original/src/components/Promotions/styles.tsx +3 -3
  189. package/themes/original/src/components/ReviewDriver/styles.tsx +1 -1
  190. package/themes/original/src/components/ReviewOrder/styles.tsx +1 -1
  191. package/themes/original/src/components/ReviewProducts/index.tsx +16 -7
  192. package/themes/original/src/components/ReviewProducts/styles.tsx +1 -1
  193. package/themes/original/src/components/ScheduleAccordion/index.tsx +3 -3
  194. package/themes/original/src/components/ServiceForm/index.tsx +36 -24
  195. package/themes/original/src/components/ServiceForm/styles.tsx +4 -4
  196. package/themes/original/src/components/SignupForm/index.tsx +27 -16
  197. package/themes/original/src/components/SingleOrderCard/index.tsx +44 -20
  198. package/themes/original/src/components/SingleOrderCard/styles.tsx +1 -1
  199. package/themes/original/src/components/SingleProductCard/index.tsx +13 -10
  200. package/themes/original/src/components/SingleProductCard/styles.tsx +8 -3
  201. package/themes/original/src/components/SingleProductReview/styles.tsx +1 -1
  202. package/themes/original/src/components/StripeCardsList/index.tsx +61 -5
  203. package/themes/original/src/components/StripeElementsForm/index.tsx +48 -34
  204. package/themes/original/src/components/StripeElementsForm/naked.tsx +12 -1
  205. package/themes/original/src/components/UpsellingProducts/UpsellingContent.tsx +170 -0
  206. package/themes/original/src/components/UpsellingProducts/UpsellingLayout.tsx +86 -0
  207. package/themes/original/src/components/UpsellingProducts/index.tsx +16 -205
  208. package/themes/original/src/components/UpsellingProducts/styles.tsx +19 -0
  209. package/themes/original/src/components/UserDetails/index.tsx +3 -1
  210. package/themes/original/src/components/UserFormDetails/index.tsx +100 -22
  211. package/themes/original/src/components/UserFormDetails/styles.tsx +1 -1
  212. package/themes/original/src/components/UserProfile/index.tsx +8 -26
  213. package/themes/original/src/components/UserProfileForm/index.tsx +30 -31
  214. package/themes/original/src/components/UserVerification/index.tsx +55 -50
  215. package/themes/original/src/components/WalletTransactionItem/index.tsx +2 -2
  216. package/themes/original/src/components/WalletTransactions/index.tsx +3 -3
  217. package/themes/original/src/components/WalletTransactions/styles.tsx +1 -0
  218. package/themes/original/src/components/Wallets/index.tsx +48 -60
  219. package/themes/original/src/components/Wallets/styles.tsx +3 -4
  220. package/themes/original/src/components/shared/HeaderTitle.tsx +1 -1
  221. package/themes/original/src/components/shared/OButton.tsx +3 -3
  222. package/themes/original/src/components/shared/OInput.tsx +4 -5
  223. package/themes/original/src/components/shared/OModal.tsx +15 -17
  224. package/themes/original/src/layouts/Container.tsx +1 -1
  225. package/themes/original/src/types/index.tsx +28 -6
  226. package/themes/original/src/utils/index.tsx +180 -13
  227. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
  228. package/src/navigators/BottomNavigator.tsx +0 -117
  229. package/src/navigators/CheckoutNavigator.tsx +0 -66
  230. package/src/navigators/HomeNavigator.tsx +0 -202
  231. package/src/navigators/NavigationRef.tsx +0 -7
  232. package/src/navigators/RootNavigator.tsx +0 -269
  233. package/src/pages/Account.tsx +0 -34
  234. package/src/pages/AddressForm.tsx +0 -62
  235. package/src/pages/AddressList.tsx +0 -24
  236. package/src/pages/BusinessProductsList.tsx +0 -81
  237. package/src/pages/BusinessesListing.tsx +0 -43
  238. package/src/pages/CartList.tsx +0 -49
  239. package/src/pages/Checkout.tsx +0 -101
  240. package/src/pages/ForgotPassword.tsx +0 -24
  241. package/src/pages/Help.tsx +0 -23
  242. package/src/pages/HelpAccountAndPayment.tsx +0 -23
  243. package/src/pages/HelpGuide.tsx +0 -23
  244. package/src/pages/HelpOrder.tsx +0 -23
  245. package/src/pages/Home.tsx +0 -36
  246. package/src/pages/IntroductoryTutorial.tsx +0 -170
  247. package/src/pages/Login.tsx +0 -47
  248. package/src/pages/MomentOption.tsx +0 -30
  249. package/src/pages/MultiCheckout.tsx +0 -31
  250. package/src/pages/MultiOrdersDetails.tsx +0 -27
  251. package/src/pages/MyOrders.tsx +0 -40
  252. package/src/pages/NetworkError.tsx +0 -24
  253. package/src/pages/NotFound.tsx +0 -22
  254. package/src/pages/OrderDetails.tsx +0 -25
  255. package/src/pages/ProductDetails.tsx +0 -55
  256. package/src/pages/Profile.tsx +0 -36
  257. package/src/pages/ReviewDriver.tsx +0 -30
  258. package/src/pages/ReviewOrder.tsx +0 -32
  259. package/src/pages/ReviewProducts.tsx +0 -30
  260. package/src/pages/Sessions.tsx +0 -22
  261. package/src/pages/Signup.tsx +0 -53
  262. package/src/pages/SpinnerLoader.tsx +0 -10
  263. package/src/pages/Splash.tsx +0 -21
@@ -1,5 +1,5 @@
1
1
  import React, { useEffect, useRef, useState } from 'react';
2
- import { View, Pressable, StyleSheet, Linking, Platform, TouchableOpacity, Vibration } from 'react-native';
2
+ import { View, Pressable, StyleSheet, Linking, Platform, TouchableOpacity } from 'react-native';
3
3
  import { useForm, Controller } from 'react-hook-form';
4
4
  import Spinner from 'react-native-loading-spinner-overlay';
5
5
  import MaterialCommunityIcons from 'react-native-vector-icons/MaterialCommunityIcons';
@@ -8,6 +8,7 @@ import { PhoneInputNumber } from '../PhoneInputNumber';
8
8
  import { FacebookLogin } from '../FacebookLogin';
9
9
  import Recaptcha from 'react-native-recaptcha-that-works'
10
10
  import ReCaptcha from '@fatnlazycat/react-native-recaptcha-v3'
11
+ import ReactNativeHapticFeedback from "react-native-haptic-feedback";
11
12
 
12
13
  import {
13
14
  SignupForm as SignUpController,
@@ -164,6 +165,14 @@ const SignupFormUI = (props: SignupParams) => {
164
165
  })
165
166
  }
166
167
 
168
+ const vibrateApp = (impact?: string) => {
169
+ const options = {
170
+ enableVibrateFallback: true,
171
+ ignoreAndroidSystemSettings: false
172
+ };
173
+ ReactNativeHapticFeedback.trigger(impact || "impactLight", options);
174
+ }
175
+
167
176
  const handleRefs = (ref: any, code: string) => {
168
177
  switch (code) {
169
178
  case 'name': {
@@ -246,7 +255,7 @@ const SignupFormUI = (props: SignupParams) => {
246
255
  const onSubmit = (values?: any) => {
247
256
  if (phoneInputData.error && signUpTab !== 'otpEmail') {
248
257
  showToast(ToastType.Error, phoneInputData.error);
249
- Vibration.vibrate()
258
+ vibrateApp()
250
259
  return;
251
260
  }
252
261
  if (
@@ -264,7 +273,7 @@ const SignupFormUI = (props: SignupParams) => {
264
273
  'The field Mobile phone is required.',
265
274
  ),
266
275
  );
267
- Vibration.vibrate()
276
+ vibrateApp()
268
277
  return;
269
278
  }
270
279
  if (signUpTab === 'otpEmail' || signUpTab === 'otpCellphone') {
@@ -323,7 +332,7 @@ const SignupFormUI = (props: SignupParams) => {
323
332
  };
324
333
 
325
334
  const handleChangeInputEmail = (value: string, onChange: any) => {
326
- onChange(value.toLowerCase().replace(/[&,()%";:ç?<>{}\\[\]\s]/g, ''));
335
+ onChange(value.toLowerCase().trim().replace(/[&,()%";:ç?<>{}\\[\]\s]/g, ''));
327
336
  };
328
337
 
329
338
  const handleOpenTermsUrl = async (url: any) => {
@@ -333,7 +342,7 @@ const SignupFormUI = (props: SignupParams) => {
333
342
  await Linking.openURL(url);
334
343
  } else {
335
344
  showToast(ToastType.Error, t('VALIDATION_ERROR_ACTIVE_URL', 'The _attribute_ is not a valid URL.').replace('_attribute_', t('URL', 'URL')))
336
- Vibration.vibrate()
345
+ vibrateApp()
337
346
  }
338
347
  }
339
348
 
@@ -341,12 +350,12 @@ const SignupFormUI = (props: SignupParams) => {
341
350
  setRecaptchaVerified(false)
342
351
  if (!recaptchaConfig?.siteKey) {
343
352
  showToast(ToastType.Error, t('NO_RECAPTCHA_SITE_KEY', 'The config doesn\'t have recaptcha site key'));
344
- Vibration.vibrate()
353
+ vibrateApp()
345
354
  return
346
355
  }
347
356
  if (!recaptchaConfig?.baseUrl) {
348
357
  showToast(ToastType.Error, t('NO_RECAPTCHA_BASE_URL', 'The config doesn\'t have recaptcha base url'));
349
- Vibration.vibrate()
358
+ vibrateApp()
350
359
  return
351
360
  }
352
361
  recaptchaRef.current.open()
@@ -390,11 +399,13 @@ const SignupFormUI = (props: SignupParams) => {
390
399
  baseUrl: configs?.security_recaptcha_base_url?.value || null
391
400
  })
392
401
  showToast(ToastType.Info, t('TRY_AGAIN', 'Please try again'))
393
- Vibration.vibrate()
402
+ vibrateApp()
394
403
  return
395
404
  }
396
- formState.result?.result && showToast(ToastType.Error, formState.result?.result[0]);
397
- formState.result?.result && Vibration.vibrate()
405
+ formState.result?.result && formState.result?.result[0]?.includes("_") ?
406
+ showToast(ToastType.Error, t(`${formState.result?.result[0]}`, 'Phone number already used')) :
407
+ showToast(ToastType.Error, formState.result?.result[0])
408
+ formState.result?.result && vibrateApp()
398
409
  setIsLoadingVerifyModal(false);
399
410
  }
400
411
  }, [formState]);
@@ -402,7 +413,7 @@ const SignupFormUI = (props: SignupParams) => {
402
413
  useEffect(() => {
403
414
  if (Object.keys(errors).length > 0) {
404
415
  setIsLoadingVerifyModal(false);
405
- Vibration.vibrate()
416
+ vibrateApp()
406
417
  }
407
418
  }, [errors])
408
419
 
@@ -431,7 +442,7 @@ const SignupFormUI = (props: SignupParams) => {
431
442
  ? verifyPhoneState?.result?.result
432
443
  : verifyPhoneState?.result?.result[0];
433
444
  verifyPhoneState.result?.result && showToast(ToastType.Error, message);
434
- verifyPhoneState.result?.result && Vibration.vibrate()
445
+ verifyPhoneState.result?.result && vibrateApp()
435
446
  setIsLoadingVerifyModal(false);
436
447
  return;
437
448
  }
@@ -591,7 +602,7 @@ const SignupFormUI = (props: SignupParams) => {
591
602
  control={control}
592
603
  render={({ onChange, value }: any) => (
593
604
  <OInput
594
- placeholder={t(field.name)}
605
+ placeholder={t(field.name?.replace(/\s/g, '_')?.toUpperCase(), field.name)}
595
606
  style={style.inputStyle}
596
607
  icon={
597
608
  field.code === 'email'
@@ -930,7 +941,7 @@ const SignupFormUI = (props: SignupParams) => {
930
941
  (
931
942
  <FacebookLogin
932
943
  notificationState={notificationState}
933
- handleErrors={(err: any) => { showToast(ToastType.Error, err), Vibration.vibrate() }}
944
+ handleErrors={(err: any) => { showToast(ToastType.Error, err), vibrateApp() }}
934
945
  handleLoading={(val: boolean) => setIsFBLoading(val)}
935
946
  handleSuccessFacebookLogin={handleSuccessFacebook}
936
947
  />
@@ -939,7 +950,7 @@ const SignupFormUI = (props: SignupParams) => {
939
950
  <GoogleLogin
940
951
  notificationState={notificationState}
941
952
  webClientId={configs?.google_login_client_id?.value}
942
- handleErrors={(err: any) => { showToast(ToastType.Error, err), Vibration.vibrate() }}
953
+ handleErrors={(err: any) => { showToast(ToastType.Error, err), vibrateApp() }}
943
954
  handleLoading={(val: boolean) => setIsFBLoading(val)}
944
955
  handleSuccessGoogleLogin={handleSuccessFacebook}
945
956
  />
@@ -947,7 +958,7 @@ const SignupFormUI = (props: SignupParams) => {
947
958
  {(configs?.apple_login_client_id?.value !== '' && configs?.apple_login_client_id?.value !== null) && appleLoginEnabled && (
948
959
  <AppleLogin
949
960
  notificationState={notificationState}
950
- handleErrors={(err: any) => { showToast(ToastType.Error, err), Vibration.vibrate() }}
961
+ handleErrors={(err: any) => { showToast(ToastType.Error, err), vibrateApp() }}
951
962
  handleLoading={(val: boolean) => setIsFBLoading(val)}
952
963
  handleSuccessAppleLogin={handleSuccessFacebook}
953
964
  />
@@ -1,16 +1,18 @@
1
- import React, { useState } from 'react';
1
+ import React, { useState, useEffect } from 'react';
2
2
  import {
3
3
  SingleOrderCard as SingleOrderCardController,
4
4
  useUtils,
5
5
  useOrder,
6
6
  useLanguage
7
7
  } from 'ordering-components/native';
8
+ import FastImage from 'react-native-fast-image'
8
9
  import { StyleSheet, TouchableOpacity, View } from 'react-native';
9
10
  import { useTheme } from 'styled-components/native';
10
11
  import { OIcon, OText, OButton } from '../shared';
11
12
  import { SingleOrderCardParams } from '../../types';
12
13
  import { OAlert } from '../../../../../src/components/shared'
13
-
14
+ import { OrderEta } from '../OrderDetails/OrderEta'
15
+ import { useIsFocused } from '@react-navigation/native';
14
16
  import {
15
17
  InnerContainer,
16
18
  Logo,
@@ -44,12 +46,14 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
44
46
  const [, t] = useLanguage();
45
47
  const [{ carts }] = useOrder()
46
48
  const theme = useTheme();
49
+ const isFocused = useIsFocused();
47
50
 
48
- const [reorderSelected, setReorderSelected] = useState<number | null>(null);
51
+ let [reorderSelected, setReorderSelected] = useState<number | null>(null);
49
52
  const [confirm, setConfirm] = useState<any>({ open: false, content: null, handleOnAccept: null, id: null, title: null })
50
53
  const [isPressed, setIsPressed] = useState(false)
51
54
 
52
- const allowedOrderStatus = [1, 2, 5, 6, 10, 11, 12];
55
+ const allowedOrderStatus = [1, 2, 5, 6, 10, 11, 12, 15];
56
+ const isGiftCardOrder = !order?.business_id
53
57
 
54
58
  const styles = StyleSheet.create({
55
59
  container: {
@@ -128,19 +132,29 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
128
132
  });
129
133
 
130
134
  const handleReorderClick = (order: any) => {
131
- if (carts[`businessId:${order?.business_id}`] && carts[`businessId:${order?.business_id}`]?.products?.length > 0) {
135
+ setReorderSelected(null)
136
+ reorderSelected = null
137
+ const isMultiOrders = Array.isArray(order?.id)
138
+
139
+ const isRemoveCart = isMultiOrders
140
+ ? order?.business_id?.some((businessId: any) => !!carts[`businessId:${businessId}`]?.uuid)
141
+ : carts[`businessId:${order?.business_id}`] && !!carts[`businessId:${order?.business_id}`]?.uuid
142
+
143
+ if (isRemoveCart) {
132
144
  setConfirm({
133
145
  open: true,
134
146
  content: [t('QUESTION_DELETE_PRODUCTS_FROM_CART', 'Are you sure that you want to delete all products from cart?')],
135
147
  title: t('ORDER', 'Order'),
136
148
  handleOnAccept: async () => {
137
- handleRemoveCart()
149
+ handleRemoveCart(order)
138
150
  setConfirm({ ...confirm, open: false })
139
151
  }
140
152
  })
141
153
  } else {
142
- setReorderSelected(order?.id);
143
- handleReorder && handleReorder(order?.id);
154
+ const orderId = Array.isArray(order?.id) ? order?.id[0] : order?.id
155
+ setReorderSelected(orderId)
156
+ reorderSelected = orderId
157
+ handleReorder && handleReorder(order?.id)
144
158
  }
145
159
  };
146
160
 
@@ -198,6 +212,10 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
198
212
  const hideFavorite = theme?.orders?.components?.favorite?.hidden
199
213
  const hideOrderStatus = theme?.orders?.components?.order_status?.hidden
200
214
 
215
+ useEffect(() => {
216
+ if (isFocused) setReorderSelected(null)
217
+ }, [isFocused])
218
+
201
219
  return (
202
220
  <>
203
221
  <CardAnimation
@@ -215,10 +233,13 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
215
233
  key={business?.id}
216
234
  style={styles.logoWrapper}
217
235
  >
218
- <OIcon
219
- url={optimizeImage(business?.logo, 'h_300,c_limit')}
220
- src={optimizeImage(!business?.logo && theme?.images?.dummies?.businessLogo, 'h_300,c_limit')}
236
+ <FastImage
221
237
  style={styles.minilogo}
238
+ source={business?.logo ? {
239
+ uri: optimizeImage(business?.logo, 'h_300,c_limit'),
240
+ priority: FastImage.priority.normal,
241
+ } : theme?.images?.dummies?.businessLogo}
242
+ resizeMode={FastImage.resizeMode.contain}
222
243
  />
223
244
  </Logo>
224
245
  ))}
@@ -228,10 +249,13 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
228
249
  </MultiLogosContainer>
229
250
  ) : (
230
251
  <Logo style={styles.logoWrapper}>
231
- <OIcon
232
- url={optimizeImage(order.business?.logo, 'h_300,c_limit')}
233
- src={optimizeImage(!order.business?.logo && theme?.images?.dummies?.businessLogo, 'h_300,c_limit')}
252
+ <FastImage
234
253
  style={styles.logo}
254
+ source={order.business?.logo ? {
255
+ uri: optimizeImage(order.business?.logo, 'h_300,c_limit'),
256
+ priority: FastImage.priority.normal,
257
+ } : theme?.images?.dummies?.businessLogo}
258
+ resizeMode={FastImage.resizeMode.contain}
235
259
  />
236
260
  </Logo>
237
261
  )}
@@ -267,11 +291,11 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
267
291
  )}
268
292
  </>
269
293
  )}
270
- {!!pastOrders && (
294
+ {!!pastOrders && !isGiftCardOrder && (
271
295
  <ButtonWrapper>
272
296
  {!hideReviewOrderButton &&
273
297
  allowedOrderStatus.includes(parseInt(order?.status)) &&
274
- !order.review && (
298
+ !order.review && order?.cart && (
275
299
  <TouchableOpacity
276
300
  onPress={() => handleClickOrderReview(order)}
277
301
  style={styles.reviewButton}>
@@ -280,7 +304,7 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
280
304
  </OText>
281
305
  </TouchableOpacity>
282
306
  )}
283
- {order.cart && !hideReorderButton && (
307
+ {!hideReorderButton && typeof order?.id === 'number' && order?.cart && (
284
308
  <OButton
285
309
  text={t('REORDER', 'Reorder')}
286
310
  imgRightSrc={''}
@@ -333,7 +357,7 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
333
357
  {
334
358
  pastOrders
335
359
  ? order?.delivery_datetime_utc ? parseDate(order?.delivery_datetime_utc) : parseDate(order?.delivery_datetime, { utc: false })
336
- : order?.eta_time + 'min'
360
+ : <OrderEta order={order} />
337
361
  }
338
362
  </OText>
339
363
  )}
@@ -352,8 +376,8 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
352
376
  <LottieAnimation
353
377
  type='favorite'
354
378
  onClick={handleChangeFavorite}
355
- initialValue={order?.favorite ? 0.75 : 0}
356
- toValue={order?.favorite ? 0 : 0.75}
379
+ initialValue={order?.favorite ? 0.5 : 0}
380
+ toValue={order?.favorite ? 0 : 0.5}
357
381
  style={{ marginBottom: 5 }}
358
382
  iconProps={{ color: theme.colors.danger5, size: 16, style: { top: 7 } }}
359
383
  isActive={order?.favorite}
@@ -19,7 +19,7 @@ export const CardInfoWrapper = styled.View`
19
19
 
20
20
  export const ContentHeader = styled.View`
21
21
  flex-direction: row;
22
- justify-content: space-between;
22
+ justify-content: flex-end;
23
23
  `
24
24
 
25
25
  export const ButtonWrapper = styled.View`
@@ -17,7 +17,7 @@ import { InView } from 'react-native-intersection-observer'
17
17
  import { Fade, Placeholder, PlaceholderLine } from 'rn-placeholder';
18
18
  import { OButton, OIcon, OText } from '../shared';
19
19
  import FastImage from 'react-native-fast-image'
20
- import { shape } from '../../utils';
20
+ import { lightenDarkenColor, shape } from '../../utils';
21
21
  import { LottieAnimation } from '../LottieAnimation';
22
22
  import { CardAnimation } from '../shared/CardAnimation'
23
23
 
@@ -40,7 +40,8 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
40
40
  navigation,
41
41
  businessId,
42
42
  isPreviously,
43
- viewString
43
+ viewString,
44
+ businessSingleId
44
45
  } = props;
45
46
 
46
47
  const theme = useTheme();
@@ -108,7 +109,7 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
108
109
  },
109
110
  productTagsStyle: {
110
111
  width: 30,
111
- height: 30,
112
+ height: 30,
112
113
  marginRight: 5
113
114
  }
114
115
  });
@@ -168,7 +169,7 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
168
169
  }
169
170
 
170
171
  return (
171
- <InView style={{ minHeight: hideAddButton ? 125 : 190 }} triggerOnce={true} onChange={(inView: boolean) => handleChangeIntersection()}>
172
+ <InView style={{ minHeight: hideAddButton ? 125 : 190, marginLeft: logoPosition === 'left' ? 12.5 : 0 }} triggerOnce={true} onChange={(inView: boolean) => handleChangeIntersection()}>
172
173
  {isIntersectionObserver ? (
173
174
  <CardAnimation
174
175
  onClick={() => handleClickproduct()}
@@ -180,8 +181,8 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
180
181
  >
181
182
  <View style={{ flexDirection: logoPosition === 'left' ? 'row-reverse' : 'row' }}>
182
183
  {productAddedToCartLength > 0 && (
183
- <QuantityContainer style={[styles.quantityContainer, {
184
- transform: [{ translateX: 25 }, { translateY: -25 }],
184
+ <QuantityContainer businessSingleId={businessSingleId} style={[styles.quantityContainer, {
185
+ transform: [{ translateX: logoPosition === 'right' ? 25 : -25 }, { translateY: -25 }],
185
186
  }]}>
186
187
  <OText size={12} color={theme.colors.white}>{productAddedToCartLength.toString()}</OText>
187
188
  </QuantityContainer>
@@ -200,8 +201,8 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
200
201
  <LottieAnimation
201
202
  type='favorite'
202
203
  onClick={handleChangeFavorite}
203
- initialValue={product?.favorite ? 0.75 : 0}
204
- toValue={product?.favorite ? 0 : 0.75}
204
+ initialValue={product?.favorite ? 0.5 : 0}
205
+ toValue={product?.favorite ? 0 : 0.5}
205
206
  disableAnimation={!auth}
206
207
  iconProps={{ color: theme.colors.danger5, size: 18 }}
207
208
  isActive={product?.favorite}
@@ -221,7 +222,7 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
221
222
  showsHorizontalScrollIndicator={false}
222
223
  horizontal
223
224
  style={{ marginLeft: 10 }}
224
- contentContainerStyle={{flexGrow: 1}}
225
+ contentContainerStyle={{ flexGrow: 1 }}
225
226
  >
226
227
  {product?.tags.map((tag: any, i: any) => (
227
228
  <TouchableWithoutFeedback key={i}>
@@ -265,13 +266,15 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
265
266
  {!!product?.ribbon?.enabled && (
266
267
  <RibbonBox
267
268
  bgColor={product?.ribbon?.color}
269
+ colorText={lightenDarkenColor(product?.ribbon?.color)}
270
+ borderRibbon={lightenDarkenColor(product?.ribbon?.color)}
268
271
  isRoundRect={product?.ribbon?.shape === shape?.rectangleRound}
269
272
  isCapsule={product?.ribbon?.shape === shape?.capsuleShape}
270
273
  >
271
274
  <OText
272
275
  size={textSize}
273
276
  weight={'400'}
274
- color={theme.colors.white}
277
+ color={lightenDarkenColor(product?.ribbon?.color) ? theme.colors.black : theme.colors.white}
275
278
  numberOfLines={2}
276
279
  ellipsizeMode='tail'
277
280
  lineHeight={13}
@@ -49,16 +49,21 @@ export const RibbonBox = styled.View`
49
49
  background-color: ${(props: any) => props.theme.colors.primary};
50
50
  padding: 1px 8px;
51
51
  max-width: 60px;
52
-
53
52
  ${(props: any) => props.bgColor && css`
54
53
  background-color: ${props.bgColor};
55
54
  `}
56
-
57
55
  ${(props: any) => props.isRoundRect && css`
58
56
  border-radius: 7.6px;
59
57
  `}
60
-
61
58
  ${(props: any) => props.isCapsule && css`
62
59
  border-radius: 50px;
63
60
  `}
61
+
62
+ ${(props: any) => props.colorText && css`
63
+ color: ${props.colorText ? 'black' : 'white'};
64
+ `}
65
+
66
+ ${(props: any) => props.borderRibbon && css`
67
+ border: 1px solid ${props.borderRibbon ? 'black' : 'white'};
68
+ `}
64
69
  `
@@ -19,7 +19,7 @@ export const LogoWrapper = styled.View`
19
19
  shadowRadius: 3;
20
20
  shadowOffset: { width: 1, height: 4 };
21
21
  elevation: 3;
22
- borderRadius: 8;
22
+ border-radius: 8;
23
23
  shadowOpacity: 0.1;
24
24
  overflow: hidden;
25
25
  width: 80;
@@ -1,14 +1,15 @@
1
- import React from 'react';
2
- import { View, StyleSheet, ScrollView } from 'react-native';
1
+ import React, { useEffect } from 'react';
2
+ import { View, StyleSheet, ScrollView, Platform } from 'react-native';
3
3
  import {
4
4
  PaymentOptionStripe,
5
5
  useSession,
6
6
  useLanguage,
7
+ useValidationFields
7
8
  } from 'ordering-components/native';
8
9
  import { PlaceholderLine } from 'rn-placeholder';
9
10
  import { useTheme } from 'styled-components/native';
10
11
  import { getIconCard } from '../../utils';
11
- import { OAlert, OIcon, OText } from '../shared';
12
+ import { OAlert, OIcon, OText, OModal } from '../shared';
12
13
 
13
14
  import { NotFoundSource } from '../NotFoundSource';
14
15
 
@@ -17,26 +18,46 @@ import {
17
18
  OSItemContent,
18
19
  OSItemActions,
19
20
  } from '../PaymentOptionStripe/styles';
21
+ import { StripeElementsForm } from '../StripeElementsForm';
20
22
 
21
- const StripeCardsListUI = (props: any) => {
23
+ import { KeyboardAvoidingView } from 'react-native';
24
+
25
+ export const StripeCardsListUI = (props: any) => {
22
26
  const {
23
27
  onSelectCard,
24
28
  deleteCard,
25
29
  cardSelected,
26
30
  cardsList,
27
31
  handleCardClick,
32
+ setAddCardOpen,
33
+ gateway,
34
+ setCardsList,
35
+ addCardOpen,
36
+ isOpenMethod,
37
+ handlePaymethodDataChange
28
38
  } = props;
29
39
 
30
40
  const theme = useTheme();
31
41
 
32
42
  const [{ token }] = useSession();
33
43
  const [, t] = useLanguage();
44
+ const [validationFields] = useValidationFields()
45
+ const validateZipcodeCard =
46
+ validationFields?.fields?.card?.zipcode?.enabled && validationFields?.fields?.card?.zipcode?.required
47
+ const paymethodsWithoutSaveCards = ['credomatic']
34
48
 
35
49
  const handleCardSelected = (card: any) => {
50
+ if (!card?.zipcode && validateZipcodeCard) return
36
51
  handleCardClick(card);
37
52
  onSelectCard(card);
38
53
  }
39
54
 
55
+ useEffect(() => {
56
+ if (!cardsList?.loading && cardsList?.cards?.length === 0 && !paymethodsWithoutSaveCards.includes(gateway)) {
57
+ setAddCardOpen({ ...addCardOpen, stripe: true })
58
+ }
59
+ }, [cardsList?.loading])
60
+
40
61
  return (
41
62
  <>
42
63
  {token && !cardsList.loading && cardsList.cards && cardsList.cards.length === 0 && (
@@ -75,7 +96,8 @@ const StripeCardsListUI = (props: any) => {
75
96
  style={styles.cardsList}
76
97
  >
77
98
  {cardsList.cards.map((card: any) => (
78
- <OSItem key={card.id} isUnique={cardsList.cards.length}>
99
+ <OSItem key={card.id} isUnique={cardsList.cards.length} isInvalid={!card?.zipcode && validateZipcodeCard}>
100
+ {console.log(card?.zipcode && validateZipcodeCard)}
79
101
  <OSItemContent onPress={() => handleCardSelected(card)}>
80
102
  <View style={styles.viewStyle}>
81
103
  {card.id === cardSelected?.id ? (
@@ -100,6 +122,13 @@ const StripeCardsListUI = (props: any) => {
100
122
  XXXX-XXXX-XXXX-{card.last4}
101
123
  </OText>
102
124
  </View>
125
+ {!card?.zipcode && validateZipcodeCard && (
126
+ <View style={styles.viewStyle}>
127
+ <OText size={10} color={theme?.colors?.danger5}>
128
+ ({t('MISSING_ZIPCODE', 'Missing zipcode')})
129
+ </OText>
130
+ </View>
131
+ )}
103
132
  </OSItemContent>
104
133
  <OSItemActions>
105
134
  <OAlert
@@ -118,6 +147,33 @@ const StripeCardsListUI = (props: any) => {
118
147
  ))}
119
148
  </ScrollView>
120
149
  )}
150
+ <OModal
151
+ entireModal
152
+ title={t('ADD_CREDIT_OR_DEBIT_CARD', 'Add credit or debit card')}
153
+ open={addCardOpen.stripe}
154
+ onClose={() => setAddCardOpen({ ...addCardOpen, stripe: false })}
155
+ style={{ backgroundColor: 'red' }}
156
+ >
157
+ <KeyboardAvoidingView
158
+ behavior={Platform.OS == 'ios' ? 'padding' : 'height'}
159
+ keyboardVerticalOffset={Platform.OS == 'ios' ? 0 : 0}
160
+ enabled={Platform.OS === 'ios' ? true : false}
161
+ >
162
+ <StripeElementsForm
163
+ openCarts={props.openCarts}
164
+ toSave
165
+ businessId={props.businessId}
166
+ businessIds={props.businessIds}
167
+ publicKey={props.publicKey || isOpenMethod?.paymethod?.credentials?.publishable}
168
+ setCardsList={setCardsList}
169
+ cardsList={cardsList}
170
+ requirements={props.clientSecret}
171
+ handleCardClick={handleCardClick}
172
+ onSelectCard={handlePaymethodDataChange}
173
+ onCancel={() => setAddCardOpen({ ...addCardOpen, stripe: false })}
174
+ />
175
+ </KeyboardAvoidingView>
176
+ </OModal>
121
177
  </>
122
178
  )
123
179
  }