ordering-ui-react-native 0.16.71 → 0.16.72-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 (202) hide show
  1. package/package.json +6 -5
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/ActiveOrders/styles.tsx +8 -14
  4. package/src/components/BusinessInformation/index.tsx +19 -4
  5. package/src/components/BusinessInformation/styles.tsx +2 -2
  6. package/src/components/BusinessProductsList/index.tsx +10 -10
  7. package/src/components/BusinessesListing/index.tsx +1 -1
  8. package/src/components/Checkout/index.tsx +2 -1
  9. package/src/components/LanguageSelector/index.tsx +21 -16
  10. package/src/components/Messages/index.tsx +2 -2
  11. package/src/components/OrdersOption/index.tsx +54 -56
  12. package/src/components/PaymentOptions/index.tsx +298 -345
  13. package/src/components/PaymentOptionsWebView/index.tsx +119 -120
  14. package/src/components/SingleProductReview/index.tsx +7 -4
  15. package/src/components/StripeElementsForm/index.tsx +25 -16
  16. package/src/components/VerifyPhone/styles.tsx +1 -2
  17. package/src/components/shared/OToast.tsx +4 -4
  18. package/src/types/@fatnlazycat/react-native-recaptcha-v3/index.d.ts +1 -0
  19. package/src/utils/index.tsx +2 -1
  20. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +260 -238
  21. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +6 -4
  22. package/themes/business/src/components/BusinessController/index.tsx +2 -2
  23. package/themes/business/src/components/Chat/index.tsx +31 -31
  24. package/themes/business/src/components/DriverMap/index.tsx +7 -5
  25. package/themes/business/src/components/LoginForm/index.tsx +111 -74
  26. package/themes/business/src/components/MapView/index.tsx +14 -3
  27. package/themes/business/src/components/MessagesOption/index.tsx +11 -1
  28. package/themes/business/src/components/NewOrderNotification/index.tsx +31 -41
  29. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +70 -43
  30. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +3 -3
  31. package/themes/business/src/components/OrdersOption/index.tsx +63 -73
  32. package/themes/business/src/components/OrdersOption/styles.tsx +5 -1
  33. package/themes/business/src/components/OrdersOptionBusiness/index.tsx +15 -1
  34. package/themes/business/src/components/OrdersOptionCity/index.tsx +15 -1
  35. package/themes/business/src/components/OrdersOptionDate/index.tsx +19 -6
  36. package/themes/business/src/components/OrdersOptionDelivery/index.tsx +15 -1
  37. package/themes/business/src/components/OrdersOptionDriver/index.tsx +15 -1
  38. package/themes/business/src/components/OrdersOptionPaymethod/index.tsx +15 -1
  39. package/themes/business/src/components/OrdersOptionStatus/index.tsx +10 -1
  40. package/themes/business/src/components/PreviousMessages/index.tsx +17 -18
  41. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +250 -0
  42. package/themes/business/src/components/PreviousOrders/OrdersGroupedItem.tsx +115 -0
  43. package/themes/business/src/components/PreviousOrders/index.tsx +440 -245
  44. package/themes/business/src/components/PreviousOrders/styles.tsx +31 -3
  45. package/themes/business/src/components/ProductItemAccordion/index.tsx +3 -2
  46. package/themes/business/src/components/ReviewCustomer/index.tsx +39 -15
  47. package/themes/business/src/components/shared/ODropDown.tsx +42 -8
  48. package/themes/business/src/components/shared/ODropDownCalendar.tsx +36 -7
  49. package/themes/business/src/components/shared/OLink.tsx +33 -13
  50. package/themes/business/src/components/shared/OText.tsx +8 -2
  51. package/themes/business/src/types/index.tsx +14 -3
  52. package/themes/business/src/utils/index.tsx +10 -0
  53. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  54. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  55. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  56. package/themes/kiosk/src/components/BusinessesListing/index.tsx +2 -1
  57. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  58. package/themes/kiosk/src/components/LoginForm/index.tsx +121 -10
  59. package/themes/kiosk/src/components/LoginForm/styles.tsx +5 -0
  60. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  61. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  62. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  63. package/themes/kiosk/src/components/ProductForm/index.tsx +1 -14
  64. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  65. package/themes/kiosk/src/types/index.d.ts +2 -0
  66. package/themes/original/index.tsx +6 -0
  67. package/themes/original/src/components/AddressDetails/index.tsx +10 -8
  68. package/themes/original/src/components/AddressForm/index.tsx +153 -137
  69. package/themes/original/src/components/AddressList/index.tsx +18 -18
  70. package/themes/original/src/components/AddressList/styles.tsx +4 -2
  71. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  72. package/themes/original/src/components/BusinessBasicInformation/index.tsx +47 -22
  73. package/themes/original/src/components/BusinessController/index.tsx +101 -70
  74. package/themes/original/src/components/BusinessController/styles.tsx +14 -9
  75. package/themes/original/src/components/BusinessInformation/index.tsx +10 -31
  76. package/themes/original/src/components/BusinessItemAccordion/index.tsx +12 -6
  77. package/themes/original/src/components/BusinessListingSearch/BusinessControllerSkeletons/index.tsx +57 -0
  78. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/index.tsx +59 -0
  79. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/styles.tsx +13 -0
  80. package/themes/original/src/components/BusinessListingSearch/index.tsx +87 -142
  81. package/themes/original/src/components/BusinessListingSearch/styles.tsx +10 -12
  82. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +87 -0
  83. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/styles.tsx +12 -0
  84. package/themes/original/src/components/BusinessProductsList/index.tsx +41 -62
  85. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  86. package/themes/original/src/components/BusinessProductsListing/index.tsx +560 -496
  87. package/themes/original/src/components/BusinessProductsListing/styles.tsx +13 -12
  88. package/themes/original/src/components/BusinessTypeFilter/index.tsx +3 -2
  89. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +2 -1
  90. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +83 -92
  91. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -9
  92. package/themes/original/src/components/BusinessesListing/index.tsx +7 -6
  93. package/themes/original/src/components/Cart/index.tsx +75 -42
  94. package/themes/original/src/components/CartContent/index.tsx +80 -18
  95. package/themes/original/src/components/CartContent/styles.tsx +11 -1
  96. package/themes/original/src/components/Checkout/index.tsx +92 -105
  97. package/themes/original/src/components/Checkout/styles.tsx +4 -3
  98. package/themes/original/src/components/CitiesControl/index.tsx +89 -0
  99. package/themes/original/src/components/CitiesControl/styles.tsx +17 -0
  100. package/themes/original/src/components/DriverTips/index.tsx +47 -37
  101. package/themes/original/src/components/DriverTips/styles.tsx +2 -1
  102. package/themes/original/src/components/Favorite/index.tsx +7 -4
  103. package/themes/original/src/components/Favorite/styles.tsx +1 -1
  104. package/themes/original/src/components/FavoriteList/index.tsx +70 -80
  105. package/themes/original/src/components/FloatingButton/index.tsx +1 -2
  106. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  107. package/themes/original/src/components/GPSButton/index.tsx +20 -19
  108. package/themes/original/src/components/GPSButton/styles.ts +3 -3
  109. package/themes/original/src/components/GoogleMap/index.tsx +10 -1
  110. package/themes/original/src/components/Help/index.tsx +7 -7
  111. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +14 -20
  112. package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +6 -0
  113. package/themes/original/src/components/HelpGuide/index.tsx +12 -11
  114. package/themes/original/src/components/HelpGuide/styles.tsx +5 -0
  115. package/themes/original/src/components/HelpOrder/index.tsx +12 -20
  116. package/themes/original/src/components/HelpOrder/styles.tsx +8 -1
  117. package/themes/original/src/components/LanguageSelector/index.tsx +19 -14
  118. package/themes/original/src/components/LastOrder/index.tsx +1 -34
  119. package/themes/original/src/components/LoginForm/Otp/index.tsx +89 -73
  120. package/themes/original/src/components/LoginForm/Otp/styles.tsx +0 -1
  121. package/themes/original/src/components/LoginForm/index.tsx +98 -41
  122. package/themes/original/src/components/LottieAnimation/index.tsx +78 -0
  123. package/themes/original/src/components/MessageListing/index.tsx +7 -40
  124. package/themes/original/src/components/Messages/index.tsx +35 -20
  125. package/themes/original/src/components/MomentOption/index.tsx +17 -11
  126. package/themes/original/src/components/MultiCart/index.tsx +50 -0
  127. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +92 -93
  128. package/themes/original/src/components/MultiCheckout/index.tsx +158 -77
  129. package/themes/original/src/components/MultiOrdersDetails/SingleOrderCard.tsx +37 -224
  130. package/themes/original/src/components/MultiOrdersDetails/index.tsx +85 -34
  131. package/themes/original/src/components/MultiOrdersDetails/styles.tsx +1 -1
  132. package/themes/original/src/components/MyOrders/index.tsx +86 -20
  133. package/themes/original/src/components/NavBar/index.tsx +7 -6
  134. package/themes/original/src/components/NetworkError/index.tsx +5 -3
  135. package/themes/original/src/components/NotFoundSource/index.tsx +2 -1
  136. package/themes/original/src/components/Notifications/index.tsx +144 -0
  137. package/themes/original/src/components/Notifications/styles.tsx +20 -0
  138. package/themes/original/src/components/OrderDetails/index.tsx +100 -215
  139. package/themes/original/src/components/OrderDetails/styles.tsx +10 -1
  140. package/themes/original/src/components/OrderItAgain/index.tsx +46 -43
  141. package/themes/original/src/components/OrderProgress/index.tsx +79 -100
  142. package/themes/original/src/components/OrderProgress/styles.tsx +5 -0
  143. package/themes/original/src/components/OrderSummary/index.tsx +2 -2
  144. package/themes/original/src/components/OrderTypeSelector/index.tsx +13 -6
  145. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +94 -98
  146. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +3 -0
  147. package/themes/original/src/components/OrdersOption/index.tsx +97 -88
  148. package/themes/original/src/components/PaymentOptionStripe/styles.tsx +1 -1
  149. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  150. package/themes/original/src/components/PaymentOptions/index.tsx +1 -2
  151. package/themes/original/src/components/PhoneInputNumber/index.tsx +1 -1
  152. package/themes/original/src/components/PlaceSpot/index.tsx +22 -8
  153. package/themes/original/src/components/PreviousOrders/index.tsx +3 -2
  154. package/themes/original/src/components/ProductForm/index.tsx +212 -253
  155. package/themes/original/src/components/ProductForm/styles.tsx +5 -8
  156. package/themes/original/src/components/ProductItemAccordion/index.tsx +199 -128
  157. package/themes/original/src/components/ProductOptionSubOption/index.tsx +17 -9
  158. package/themes/original/src/components/ProductOptionSubOption/styles.tsx +1 -2
  159. package/themes/original/src/components/ProfessionalFilter/index.tsx +2 -1
  160. package/themes/original/src/components/ProfessionalProfile/index.tsx +19 -8
  161. package/themes/original/src/components/Promotions/index.tsx +234 -220
  162. package/themes/original/src/components/Promotions/styles.tsx +7 -2
  163. package/themes/original/src/components/ReviewDriver/index.tsx +3 -3
  164. package/themes/original/src/components/ReviewOrder/index.tsx +43 -11
  165. package/themes/original/src/components/ReviewOrder/styles.tsx +7 -0
  166. package/themes/original/src/components/ReviewProducts/index.tsx +8 -5
  167. package/themes/original/src/components/ReviewTrigger/index.tsx +27 -9
  168. package/themes/original/src/components/ReviewTrigger/styles.tsx +8 -1
  169. package/themes/original/src/components/ScheduleAccordion/index.tsx +68 -0
  170. package/themes/original/src/components/ScheduleAccordion/styles.tsx +14 -0
  171. package/themes/original/src/components/ServiceForm/index.tsx +328 -264
  172. package/themes/original/src/components/SignupForm/index.tsx +134 -89
  173. package/themes/original/src/components/SingleOrderCard/index.tsx +125 -56
  174. package/themes/original/src/components/SingleOrderCard/styles.tsx +10 -8
  175. package/themes/original/src/components/SingleProductCard/index.tsx +84 -80
  176. package/themes/original/src/components/SingleProductCard/styles.tsx +2 -9
  177. package/themes/original/src/components/SingleProductReview/index.tsx +38 -5
  178. package/themes/original/src/components/SingleProductReview/styles.tsx +12 -0
  179. package/themes/original/src/components/StripeCardsList/index.tsx +1 -1
  180. package/themes/original/src/components/StripeElementsForm/index.tsx +13 -2
  181. package/themes/original/src/components/UpsellingProducts/index.tsx +244 -215
  182. package/themes/original/src/components/UpsellingProducts/styles.tsx +12 -1
  183. package/themes/original/src/components/UserDetails/index.tsx +5 -3
  184. package/themes/original/src/components/UserFormDetails/index.tsx +6 -48
  185. package/themes/original/src/components/UserProfile/index.tsx +58 -35
  186. package/themes/original/src/components/UserProfile/styles.ts +17 -0
  187. package/themes/original/src/components/UserProfileForm/index.tsx +19 -28
  188. package/themes/original/src/components/UserProfileForm/styles.tsx +7 -0
  189. package/themes/original/src/components/WalletTransactions/index.tsx +76 -0
  190. package/themes/original/src/components/WalletTransactions/styles.tsx +13 -0
  191. package/themes/original/src/components/Wallets/index.tsx +176 -164
  192. package/themes/original/src/components/Wallets/styles.tsx +12 -8
  193. package/themes/original/src/components/shared/CardAnimation.tsx +47 -0
  194. package/themes/original/src/components/shared/HeaderTitle.tsx +8 -3
  195. package/themes/original/src/components/shared/OBottomPopup.tsx +6 -4
  196. package/themes/original/src/components/shared/OButton.tsx +9 -4
  197. package/themes/original/src/components/shared/OIcon.tsx +8 -1
  198. package/themes/original/src/components/shared/OInput.tsx +10 -1
  199. package/themes/original/src/layouts/Container.tsx +13 -9
  200. package/themes/original/src/types/index.tsx +35 -5
  201. package/themes/original/src/utils/index.tsx +305 -58
  202. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -1,5 +1,5 @@
1
1
  import React, { useEffect, useRef, useState } from 'react';
2
- import { View, Pressable, StyleSheet, Linking, Platform, TouchableOpacity } from 'react-native';
2
+ import { View, Pressable, StyleSheet, Linking, Platform, TouchableOpacity, Vibration } 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';
@@ -7,6 +7,7 @@ import CheckBox from '@react-native-community/checkbox';
7
7
  import { PhoneInputNumber } from '../PhoneInputNumber';
8
8
  import { FacebookLogin } from '../FacebookLogin';
9
9
  import Recaptcha from 'react-native-recaptcha-that-works'
10
+ import ReCaptcha from '@fatnlazycat/react-native-recaptcha-v3'
10
11
 
11
12
  import {
12
13
  SignupForm as SignUpController,
@@ -244,6 +245,7 @@ const SignupFormUI = (props: SignupParams) => {
244
245
  const onSubmit = (values?: any) => {
245
246
  if (phoneInputData.error && signUpTab !== 'otpEmail') {
246
247
  showToast(ToastType.Error, phoneInputData.error);
248
+ Vibration.vibrate()
247
249
  return;
248
250
  }
249
251
  if (
@@ -261,6 +263,7 @@ const SignupFormUI = (props: SignupParams) => {
261
263
  'The field Mobile phone is required.',
262
264
  ),
263
265
  );
266
+ Vibration.vibrate()
264
267
  return;
265
268
  }
266
269
  if (signUpTab === 'otpEmail' || signUpTab === 'otpCellphone') {
@@ -329,6 +332,7 @@ const SignupFormUI = (props: SignupParams) => {
329
332
  await Linking.openURL(url);
330
333
  } else {
331
334
  showToast(ToastType.Error, t('VALIDATION_ERROR_ACTIVE_URL', 'The _attribute_ is not a valid URL.').replace('_attribute_', t('URL', 'URL')))
335
+ Vibration.vibrate()
332
336
  }
333
337
  }
334
338
 
@@ -336,10 +340,12 @@ const SignupFormUI = (props: SignupParams) => {
336
340
  setRecaptchaVerified(false)
337
341
  if (!recaptchaConfig?.siteKey) {
338
342
  showToast(ToastType.Error, t('NO_RECAPTCHA_SITE_KEY', 'The config doesn\'t have recaptcha site key'));
343
+ Vibration.vibrate()
339
344
  return
340
345
  }
341
346
  if (!recaptchaConfig?.baseUrl) {
342
347
  showToast(ToastType.Error, t('NO_RECAPTCHA_BASE_URL', 'The config doesn\'t have recaptcha base url'));
348
+ Vibration.vibrate()
343
349
  return
344
350
  }
345
351
  recaptchaRef.current.open()
@@ -347,22 +353,47 @@ const SignupFormUI = (props: SignupParams) => {
347
353
 
348
354
  const onRecaptchaVerify = (token: any) => {
349
355
  setRecaptchaVerified(true)
350
- handleReCaptcha && handleReCaptcha(token)
356
+ handleReCaptcha && handleReCaptcha({ code: token, version: recaptchaConfig?.version })
351
357
  }
352
358
 
353
359
  useEffect(() => {
354
360
  if (configs && Object.keys(configs).length > 0 && enableReCaptcha) {
355
- setRecaptchaConfig({
356
- siteKey: configs?.security_recaptcha_site_key?.value || null,
357
- baseUrl: configs?.security_recaptcha_base_url?.value || null
358
- })
361
+ if (configs?.security_recaptcha_type?.value === 'v3' &&
362
+ configs?.security_recaptcha_score_v3?.value > 0 &&
363
+ configs?.security_recaptcha_site_key_v3?.value
364
+ ) {
365
+ setRecaptchaConfig({
366
+ version: 'v3',
367
+ siteKey: configs?.security_recaptcha_site_key_v3?.value || null,
368
+ baseUrl: configs?.security_recaptcha_base_url?.value || null
369
+ })
370
+ return
371
+ }
372
+ if (configs?.security_recaptcha_site_key?.value) {
373
+ setRecaptchaConfig({
374
+ version: 'v2',
375
+ siteKey: configs?.security_recaptcha_site_key?.value || null,
376
+ baseUrl: configs?.security_recaptcha_base_url?.value || null
377
+ })
378
+ }
359
379
  }
360
380
  }, [configs, enableReCaptcha])
361
381
 
362
382
  useEffect(() => {
363
383
  if (!formState.loading && formState.result?.error) {
364
- formState.result?.result &&
365
- showToast(ToastType.Error, formState.result?.result[0]);
384
+ if (formState.result?.result?.[0] === 'ERROR_AUTH_VERIFICATION_CODE') {
385
+ setRecaptchaVerified(false)
386
+ setRecaptchaConfig({
387
+ version: 'v2',
388
+ siteKey: configs?.security_recaptcha_site_key?.value || null,
389
+ baseUrl: configs?.security_recaptcha_base_url?.value || null
390
+ })
391
+ showToast(ToastType.Info, t('TRY_AGAIN', 'Please try again'))
392
+ Vibration.vibrate()
393
+ return
394
+ }
395
+ formState.result?.result && showToast(ToastType.Error, formState.result?.result[0]);
396
+ formState.result?.result && Vibration.vibrate()
366
397
  setIsLoadingVerifyModal(false);
367
398
  }
368
399
  }, [formState]);
@@ -370,6 +401,7 @@ const SignupFormUI = (props: SignupParams) => {
370
401
  useEffect(() => {
371
402
  if (Object.keys(errors).length > 0) {
372
403
  setIsLoadingVerifyModal(false);
404
+ Vibration.vibrate()
373
405
  }
374
406
  }, [errors])
375
407
 
@@ -398,6 +430,7 @@ const SignupFormUI = (props: SignupParams) => {
398
430
  ? verifyPhoneState?.result?.result
399
431
  : verifyPhoneState?.result?.result[0];
400
432
  verifyPhoneState.result?.result && showToast(ToastType.Error, message);
433
+ verifyPhoneState.result?.result && Vibration.vibrate()
401
434
  setIsLoadingVerifyModal(false);
402
435
  return;
403
436
  }
@@ -438,7 +471,6 @@ const SignupFormUI = (props: SignupParams) => {
438
471
  onActionLeft={() => navigation?.canGoBack() && navigation.goBack()}
439
472
  showCall={false}
440
473
  btnStyle={{ paddingLeft: 0 }}
441
- style={{ flexDirection: 'column', alignItems: 'flex-start' }}
442
474
  titleWrapStyle={{ paddingHorizontal: 0 }}
443
475
  titleStyle={{ marginLeft: 0, marginRight: 0 }}
444
476
  />
@@ -610,7 +642,6 @@ const SignupFormUI = (props: SignupParams) => {
610
642
  }
611
643
  })}
612
644
  forwardRef={phoneRef}
613
- defaultCode={formState?.country_code ?? formState?.country_phone_code ?? null}
614
645
  changeCountry={(val: any) => setPhoneInputData({
615
646
  ...phoneInputData,
616
647
  phone: {
@@ -627,36 +658,49 @@ const SignupFormUI = (props: SignupParams) => {
627
658
  </View>
628
659
  )}
629
660
 
630
- {enableReCaptcha && (
661
+ {(enableReCaptcha && recaptchaConfig?.version) && (
631
662
  <>
632
- <TouchableOpacity
633
- onPress={handleOpenRecaptcha}
634
- style={{ marginHorizontal: 4, marginBottom: 10 }}
635
- >
636
- <RecaptchaButton>
637
- {recaptchaVerified ? (
638
- <MaterialCommunityIcons
639
- name="checkbox-marked"
640
- size={23}
641
- color={theme.colors.primary}
642
- />
643
- ) : (
644
- <MaterialCommunityIcons
645
- name="checkbox-blank-outline"
646
- size={23}
647
- color={theme.colors.disabled}
648
- />
649
- )}
650
- <OText size={14} mLeft={8}>{t('VERIFY_ReCAPTCHA', 'Verify reCAPTCHA')}</OText>
651
- </RecaptchaButton>
652
- </TouchableOpacity>
653
- <Recaptcha
654
- ref={recaptchaRef}
655
- siteKey={recaptchaConfig?.siteKey}
656
- baseUrl={recaptchaConfig?.baseUrl}
657
- onVerify={onRecaptchaVerify}
658
- onExpire={() => setRecaptchaVerified(false)}
659
- />
663
+ {recaptchaConfig?.version === 'v3' ? (
664
+ <ReCaptcha
665
+ url={recaptchaConfig?.baseUrl}
666
+ siteKey={recaptchaConfig?.siteKey}
667
+ containerStyle={{ height: 40 }}
668
+ onExecute={onRecaptchaVerify}
669
+ reCaptchaType={1}
670
+ />
671
+ ) : (
672
+ <>
673
+ <TouchableOpacity
674
+ onPress={handleOpenRecaptcha}
675
+ style={{ marginHorizontal: 4, marginBottom: 10 }}
676
+ >
677
+ <RecaptchaButton>
678
+ {recaptchaVerified ? (
679
+ <MaterialCommunityIcons
680
+ name="checkbox-marked"
681
+ size={23}
682
+ color={theme.colors.primary}
683
+ />
684
+ ) : (
685
+ <MaterialCommunityIcons
686
+ name="checkbox-blank-outline"
687
+ size={23}
688
+ color={theme.colors.disabled}
689
+ />
690
+ )}
691
+ <OText size={14} mLeft={8}>{t('VERIFY_ReCAPTCHA', 'Verify reCAPTCHA')}</OText>
692
+ </RecaptchaButton>
693
+ </TouchableOpacity>
694
+ <Recaptcha
695
+ ref={recaptchaRef}
696
+ siteKey={recaptchaConfig?.siteKey}
697
+ baseUrl={recaptchaConfig?.baseUrl}
698
+ onVerify={onRecaptchaVerify}
699
+ onExpire={() => setRecaptchaVerified(false)}
700
+ />
701
+ </>
702
+ )}
703
+
660
704
  </>
661
705
  )}
662
706
  {(signUpTab === 'default') && (
@@ -849,64 +893,65 @@ const SignupFormUI = (props: SignupParams) => {
849
893
  </View>
850
894
  )
851
895
  }
852
- <View
853
- style={{
854
- flexDirection: 'row',
855
- width: '100%',
856
- justifyContent: 'space-between',
857
- alignItems: 'center',
858
- marginVertical: 30,
859
- }}>
860
- <View style={style.line} />
861
- <OText
862
- size={14}
863
- mBottom={10}
864
- style={{ paddingHorizontal: 19 }}
865
- color={theme.colors.disabled}>
866
- {t('OR', 'or')}
867
- </OText>
868
- <View style={style.line} />
869
- </View>
870
-
871
896
  {configs && Object.keys(configs).length > 0 && (
872
- (((configs?.facebook_login?.value === 'true' || configs?.facebook_login?.value === '1') && configs?.facebook_id?.value) ||
873
- (configs?.google_login_client_id?.value !== '' && configs?.google_login_client_id?.value !== null)) &&
897
+ (((configs?.facebook_login?.value === 'true' || configs?.facebook_login?.value === '1') && configs?.facebook_id?.value && facebookLoginEnabled) ||
898
+ ((configs?.google_login_client_id?.value !== '' && configs?.google_login_client_id?.value !== null) && googleLoginEnabled) ||
899
+ ((configs?.apple_login_client_id?.value !== '' && configs?.apple_login_client_id?.value !== null) && appleLoginEnabled)) &&
874
900
  (
875
- <ButtonsWrapper>
876
- <SocialButtons>
877
- {(configs?.facebook_login?.value === 'true' || configs?.facebook_login?.value === '1') &&
878
- configs?.facebook_id?.value &&
879
- facebookLoginEnabled &&
880
- (
881
- <FacebookLogin
901
+ <>
902
+ <View
903
+ style={{
904
+ flexDirection: 'row',
905
+ width: '100%',
906
+ justifyContent: 'space-between',
907
+ alignItems: 'center',
908
+ marginVertical: 30,
909
+ }}>
910
+ <View style={style.line} />
911
+ <OText
912
+ size={14}
913
+ mBottom={10}
914
+ style={{ paddingHorizontal: 19 }}
915
+ color={theme.colors.disabled}>
916
+ {t('OR', 'or')}
917
+ </OText>
918
+ <View style={style.line} />
919
+ </View>
920
+ <ButtonsWrapper>
921
+ <SocialButtons>
922
+ {(configs?.facebook_login?.value === 'true' || configs?.facebook_login?.value === '1') &&
923
+ configs?.facebook_id?.value &&
924
+ facebookLoginEnabled &&
925
+ (
926
+ <FacebookLogin
927
+ notificationState={notificationState}
928
+ handleErrors={(err: any) => { showToast(ToastType.Error, err), Vibration.vibrate() }}
929
+ handleLoading={(val: boolean) => setIsFBLoading(val)}
930
+ handleSuccessFacebookLogin={handleSuccessFacebook}
931
+ />
932
+ )}
933
+ {(configs?.google_login_client_id?.value !== '' && configs?.google_login_client_id?.value !== null) && googleLoginEnabled && (
934
+ <GoogleLogin
882
935
  notificationState={notificationState}
883
- handleErrors={(err: any) => showToast(ToastType.Error, err)}
936
+ webClientId={configs?.google_login_client_id?.value}
937
+ handleErrors={(err: any) => { showToast(ToastType.Error, err), Vibration.vibrate() }}
884
938
  handleLoading={(val: boolean) => setIsFBLoading(val)}
885
- handleSuccessFacebookLogin={handleSuccessFacebook}
939
+ handleSuccessGoogleLogin={handleSuccessFacebook}
886
940
  />
887
941
  )}
888
- {(configs?.google_login_client_id?.value !== '' && configs?.google_login_client_id?.value !== null) && googleLoginEnabled && (
889
- <GoogleLogin
890
- notificationState={notificationState}
891
- webClientId={configs?.google_login_client_id?.value}
892
- handleErrors={(err: any) => showToast(ToastType.Error, err)}
893
- handleLoading={(val: boolean) => setIsFBLoading(val)}
894
- handleSuccessGoogleLogin={handleSuccessFacebook}
895
- />
896
- )}
897
- {(configs?.apple_login_client_id?.value !== '' && configs?.apple_login_client_id?.value !== null) && appleLoginEnabled && (
898
- <AppleLogin
899
- notificationState={notificationState}
900
- handleErrors={(err: any) => showToast(ToastType.Error, err)}
901
- handleLoading={(val: boolean) => setIsFBLoading(val)}
902
- handleSuccessAppleLogin={handleSuccessFacebook}
903
- />
904
- )}
905
- </SocialButtons>
906
- </ButtonsWrapper>
942
+ {(configs?.apple_login_client_id?.value !== '' && configs?.apple_login_client_id?.value !== null) && appleLoginEnabled && (
943
+ <AppleLogin
944
+ notificationState={notificationState}
945
+ handleErrors={(err: any) => { showToast(ToastType.Error, err), Vibration.vibrate() }}
946
+ handleLoading={(val: boolean) => setIsFBLoading(val)}
947
+ handleSuccessAppleLogin={handleSuccessFacebook}
948
+ />
949
+ )}
950
+ </SocialButtons>
951
+ </ButtonsWrapper>
952
+ </>
907
953
  )
908
954
  )}
909
-
910
955
  </FormSide>
911
956
  <OModal
912
957
  open={willVerifyOtpState}
@@ -8,12 +8,10 @@ import {
8
8
  import { StyleSheet, TouchableOpacity, View } from 'react-native';
9
9
  import { useTheme } from 'styled-components/native';
10
10
  import { OIcon, OText, OButton } from '../shared';
11
- import IconAntDesign from 'react-native-vector-icons/AntDesign'
12
11
  import { SingleOrderCardParams } from '../../types';
13
12
  import { OAlert } from '../../../../../src/components/shared'
14
13
 
15
14
  import {
16
- Container,
17
15
  InnerContainer,
18
16
  Logo,
19
17
  CardInfoWrapper,
@@ -21,8 +19,11 @@ import {
21
19
  ButtonWrapper,
22
20
  ContentFooter,
23
21
  UnreadMessageCounter,
24
- Price
22
+ Price,
23
+ MultiLogosContainer
25
24
  } from './styles';
25
+ import { LottieAnimation } from '../LottieAnimation';
26
+ import { CardAnimation } from '../shared/CardAnimation';
26
27
 
27
28
  const SingleOrderCardUI = (props: SingleOrderCardParams) => {
28
29
  const {
@@ -46,15 +47,26 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
46
47
 
47
48
  const [reorderSelected, setReorderSelected] = useState<number | null>(null);
48
49
  const [confirm, setConfirm] = useState<any>({ open: false, content: null, handleOnAccept: null, id: null, title: null })
50
+ const [isPressed, setIsPressed] = useState(false)
49
51
 
50
52
  const allowedOrderStatus = [1, 2, 5, 6, 10, 11, 12];
51
53
 
52
54
  const styles = StyleSheet.create({
55
+ container: {
56
+ borderRadius: 7.6,
57
+ marginBottom: 10,
58
+ paddingVertical: 5,
59
+ },
53
60
  logo: {
54
61
  borderRadius: 8,
55
62
  width: 64,
56
63
  height: 64
57
64
  },
65
+ minilogo: {
66
+ borderRadius: 8,
67
+ width: 40,
68
+ height: 40
69
+ },
58
70
  logoWrapper: {
59
71
  overflow: 'hidden',
60
72
  backgroundColor: 'white',
@@ -72,9 +84,13 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
72
84
  marginRight: 2,
73
85
  },
74
86
  reorderLoading: {
75
- width: 80,
76
- height: 40,
77
- borderRadius: 10,
87
+ height: 23,
88
+ paddingLeft: 20,
89
+ paddingRight: 20,
90
+ borderRadius: 23,
91
+ shadowOpacity: 0,
92
+ backgroundColor: theme.colors.primary,
93
+ borderWidth: 0,
78
94
  },
79
95
  reorderbutton: {
80
96
  height: 23,
@@ -100,6 +116,14 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
100
116
  infoText: {
101
117
  flexDirection: 'row',
102
118
  alignItems: 'center'
119
+ },
120
+ cardAnimation: {
121
+ elevation: isPressed ? 2 : 0,
122
+ shadowColor: '#888',
123
+ shadowOffset: { width: 0, height: isPressed ? 2 : 0 },
124
+ shadowRadius: 18,
125
+ shadowOpacity: isPressed ? 0.8 : 0,
126
+ borderRadius: 12,
103
127
  }
104
128
  });
105
129
 
@@ -127,11 +151,12 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
127
151
  order: {
128
152
  id: order?.id,
129
153
  business_id: order?.business_id,
130
- logo: order?.business?.logo,
154
+ logo: order?.business?.length > 1 ? order?.business?.map?.((business: any) => business?.logo) : order?.business?.logo,
131
155
  driver: order?.driver,
132
156
  products: order?.products,
133
157
  review: order?.review,
134
- user_review: order?.user_review
158
+ user_review: order?.user_review,
159
+ business: order?.business
135
160
  },
136
161
  });
137
162
  return
@@ -144,13 +169,16 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
144
169
  onNavigationRedirect('OrderDetails', { orderId: order?.uuid });
145
170
  };
146
171
 
147
- const handleClickViewOrder = (uuid: string) => {
172
+ const handleClickViewOrder = (order: any) => {
148
173
  if (isMessageView) {
149
174
  handleClickOrder(order?.uuid)
150
175
  return
151
176
  }
152
- onNavigationRedirect &&
153
- onNavigationRedirect('OrderDetails', { orderId: uuid });
177
+ if (order?.cart_group_id) {
178
+ onNavigationRedirect?.('MultiOrdersDetails', { orderId: order?.cart_group_id });
179
+ } else {
180
+ onNavigationRedirect?.('OrderDetails', { orderId: order?.uuid });
181
+ }
154
182
  };
155
183
 
156
184
  const handleChangeFavorite = () => {
@@ -159,32 +187,65 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
159
187
 
160
188
  const handleOriginalReorder = () => {
161
189
  setConfirm({ ...confirm, open: false, title: null })
162
- setReorderSelected(order?.id);
163
- handleReorder && handleReorder(order?.id);
164
190
  }
165
191
 
192
+ const hideBusinessLogo = theme?.orders?.components?.business_logo?.hidden
193
+ const hideDate = theme?.orders?.components?.date?.hidden
194
+ const hideBusinessName = theme?.orders?.components?.business_name?.hidden
195
+ const hideOrderNumber = theme?.orders?.components?.order_number?.hidden
196
+ const hideReviewOrderButton = theme?.orders?.components?.review_order_button?.hidden
197
+ const hideReorderButton = theme?.orders?.components?.reorder_button?.hidden
198
+ const hideFavorite = theme?.orders?.components?.favorite?.hidden
199
+ const hideOrderStatus = theme?.orders?.components?.order_status?.hidden
200
+
166
201
  return (
167
202
  <>
168
- <Container
169
- onPress={() => handleClickViewOrder(order?.uuid)}
170
- activeOpacity={0.7}
203
+ <CardAnimation
204
+ onClick={() => handleClickViewOrder(order)}
205
+ style={[styles.container]}
171
206
  >
172
207
  <InnerContainer>
173
- {!!order.business?.logo && (
174
- <Logo style={styles.logoWrapper}>
175
- <OIcon
176
- url={optimizeImage(order.business?.logo, 'h_300,c_limit')}
177
- style={styles.logo}
178
- />
179
- </Logo>
208
+ {!hideBusinessLogo && (!!order.business?.logo || theme?.images?.dummies?.businessLogo) && (
209
+ <>
210
+ {order?.business?.length > 1 ? (
211
+ <MultiLogosContainer>
212
+ {order?.business?.map((business: any, i: number) => i < 2 && (
213
+ <Logo
214
+ isMulti
215
+ key={business?.id}
216
+ style={styles.logoWrapper}
217
+ >
218
+ <OIcon
219
+ url={optimizeImage(business?.logo, 'h_300,c_limit')}
220
+ src={optimizeImage(!business?.logo && theme?.images?.dummies?.businessLogo, 'h_300,c_limit')}
221
+ style={styles.minilogo}
222
+ />
223
+ </Logo>
224
+ ))}
225
+ {order?.business?.length > 1 && (order?.business?.length - 2) > 0 && (
226
+ <OText mRight={3}> + {order?.business?.length - 2}</OText>
227
+ )}
228
+ </MultiLogosContainer>
229
+ ) : (
230
+ <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')}
234
+ style={styles.logo}
235
+ />
236
+ </Logo>
237
+ )}
238
+ </>
180
239
  )}
181
240
  <CardInfoWrapper>
182
241
  <ContentHeader>
183
- <View style={{ flex: 1 }}>
184
- <OText size={12} lineHeight={18} weight={'600'} numberOfLines={1} ellipsizeMode={'tail'}>
185
- {order.business?.name}
186
- </OText>
187
- </View>
242
+ {(order?.business?.length > 1 && !hideOrderNumber) || (!order?.business?.length && !hideBusinessName) && (
243
+ <View style={{ flex: 1 }}>
244
+ <OText size={12} lineHeight={18} weight={'600'} numberOfLines={1} ellipsizeMode={'tail'}>
245
+ {order?.business?.length > 1 ? `${t('GROUP_ORDER', 'Group Order')} ${t('No', 'No')}. ${order?.cart_group_id}` : order.business?.name}
246
+ </OText>
247
+ </View>
248
+ )}
188
249
  {!!!pastOrders && (
189
250
  <>
190
251
  {isMessageView ? (
@@ -208,7 +269,8 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
208
269
  )}
209
270
  {!!pastOrders && (
210
271
  <ButtonWrapper>
211
- {allowedOrderStatus.includes(parseInt(order?.status)) &&
272
+ {!hideReviewOrderButton &&
273
+ allowedOrderStatus.includes(parseInt(order?.status)) &&
212
274
  !order.review && (
213
275
  <TouchableOpacity
214
276
  onPress={() => handleClickOrderReview(order)}
@@ -218,7 +280,7 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
218
280
  </OText>
219
281
  </TouchableOpacity>
220
282
  )}
221
- {order.cart && (
283
+ {order.cart && !hideReorderButton && (
222
284
  <OButton
223
285
  text={t('REORDER', 'Reorder')}
224
286
  imgRightSrc={''}
@@ -238,7 +300,7 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
238
300
  <ContentFooter>
239
301
  <View style={{ flex: 1 }}>
240
302
  <View style={styles.infoText}>
241
- {!!!pastOrders && (
303
+ {(!!!pastOrders || order?.business?.length > 1) && !hideOrderNumber && (
242
304
  <>
243
305
  <OText
244
306
  size={10}
@@ -248,7 +310,7 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
248
310
  lineHeight={15}
249
311
  numberOfLines={1}
250
312
  >
251
- {t('ORDER_NO', 'Order No') + '.'}
313
+ {order?.business?.length > 1 ? order?.business?.length : (t('ORDER_NO', 'Order No') + '.')}
252
314
  </OText>
253
315
  <OText
254
316
  size={10}
@@ -257,43 +319,50 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
257
319
  lineHeight={15}
258
320
  numberOfLines={1}
259
321
  >
260
- {order.id + ` \u2022 `}
322
+ {order?.business?.length > 1 ? t('ORDERS', 'orders') + ' \u2022 ' : order.id + ` \u2022 `}
261
323
  </OText>
262
324
  </>
263
325
  )}
326
+ {!hideDate && (
327
+ <OText
328
+ size={10}
329
+ lineHeight={15}
330
+ color={theme.colors.textSecondary}
331
+ style={{ marginVertical: 3 }}
332
+ numberOfLines={1}>
333
+ {
334
+ pastOrders
335
+ ? order?.delivery_datetime_utc ? parseDate(order?.delivery_datetime_utc) : parseDate(order?.delivery_datetime, { utc: false })
336
+ : order?.eta_time + 'min'
337
+ }
338
+ </OText>
339
+ )}
340
+ </View>
341
+ {!hideOrderStatus && (
264
342
  <OText
343
+ color={theme.colors.primary}
265
344
  size={10}
266
345
  lineHeight={15}
267
- color={theme.colors.textSecondary}
268
- style={{ marginVertical: 3 }}
269
346
  numberOfLines={1}>
270
- {order?.delivery_datetime_utc ? parseDate(order?.delivery_datetime_utc) : parseDate(order?.delivery_datetime, { utc: false })}
347
+ {getOrderStatus(order.status)?.value}
271
348
  </OText>
272
- </View>
273
- <OText
274
- color={theme.colors.primary}
275
- size={10}
276
- lineHeight={15}
277
- numberOfLines={1}>
278
- {getOrderStatus(order.status)?.value}
279
- </OText>
349
+ )}
280
350
  </View>
281
- {!isMessageView && (
282
- <TouchableOpacity
283
- onPress={handleChangeFavorite}
284
- style={{ marginTop: 5 }}
285
- >
286
- <IconAntDesign
287
- name={order?.favorite ? 'heart' : 'hearto'}
288
- color={theme.colors.danger5}
289
- size={16}
290
- />
291
- </TouchableOpacity>
351
+ {!isMessageView && !order?.business?.length && !hideFavorite && (
352
+ <LottieAnimation
353
+ type='favorite'
354
+ onClick={handleChangeFavorite}
355
+ initialValue={order?.favorite ? 0.75 : 0}
356
+ toValue={order?.favorite ? 0 : 0.75}
357
+ style={{ marginBottom: 5 }}
358
+ iconProps={{ color: theme.colors.danger5, size: 16, style: { top: 7 } }}
359
+ isActive={order?.favorite}
360
+ />
292
361
  )}
293
362
  </ContentFooter>
294
363
  </CardInfoWrapper>
295
364
  </InnerContainer>
296
- </Container>
365
+ </CardAnimation>
297
366
  <OAlert
298
367
  open={confirm.open}
299
368
  title={confirm.title}
@@ -1,11 +1,4 @@
1
- import styled from 'styled-components/native'
2
-
3
- export const Container = styled.TouchableOpacity`
4
- border-radius: 7.6px;
5
- box-shadow: 0 1px 2px #0000001A;
6
- margin-bottom: 10px;
7
- padding-vertical: 5px;
8
- `
1
+ import styled, { css } from 'styled-components/native'
9
2
 
10
3
  export const InnerContainer = styled.View`
11
4
  flex-direction: row;
@@ -15,6 +8,9 @@ export const InnerContainer = styled.View`
15
8
  export const Logo = styled.View`
16
9
  border-radius: 7.6px;
17
10
  margin-right: 12px;
11
+ ${({ isMulti } : any) => isMulti && css`
12
+ margin-right: 5px;
13
+ `}
18
14
  `
19
15
 
20
16
  export const CardInfoWrapper = styled.View`
@@ -52,3 +48,9 @@ export const Price = styled.View`
52
48
  margin-left: 10px;
53
49
  width: 30%;
54
50
  `
51
+
52
+ export const MultiLogosContainer = styled.View`
53
+ display: flex;
54
+ align-items: center;
55
+ flex-direction: row;
56
+ `