ordering-ui-react-native 0.16.70 → 0.16.71-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 +49 -25
  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 +561 -479
  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 +93 -99
  91. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -9
  92. package/themes/original/src/components/BusinessesListing/index.tsx +8 -8
  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 +129 -54
  174. package/themes/original/src/components/SingleOrderCard/styles.tsx +10 -8
  175. package/themes/original/src/components/SingleProductCard/index.tsx +85 -82
  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,9 +169,16 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
144
169
  onNavigationRedirect('OrderDetails', { orderId: order?.uuid });
145
170
  };
146
171
 
147
- const handleClickViewOrder = (uuid: string) => {
148
- onNavigationRedirect &&
149
- onNavigationRedirect('OrderDetails', { orderId: uuid });
172
+ const handleClickViewOrder = (order: any) => {
173
+ if (isMessageView) {
174
+ handleClickOrder(order?.uuid)
175
+ return
176
+ }
177
+ if (order?.cart_group_id) {
178
+ onNavigationRedirect?.('MultiOrdersDetails', { orderId: order?.cart_group_id });
179
+ } else {
180
+ onNavigationRedirect?.('OrderDetails', { orderId: order?.uuid });
181
+ }
150
182
  };
151
183
 
152
184
  const handleChangeFavorite = () => {
@@ -155,32 +187,65 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
155
187
 
156
188
  const handleOriginalReorder = () => {
157
189
  setConfirm({ ...confirm, open: false, title: null })
158
- setReorderSelected(order?.id);
159
- handleReorder && handleReorder(order?.id);
160
190
  }
161
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
+
162
201
  return (
163
202
  <>
164
- <Container
165
- onPress={() => handleClickViewOrder(order?.uuid)}
166
- activeOpacity={0.7}
203
+ <CardAnimation
204
+ onClick={() => handleClickViewOrder(order)}
205
+ style={[styles.container]}
167
206
  >
168
207
  <InnerContainer>
169
- {!!order.business?.logo && (
170
- <Logo style={styles.logoWrapper}>
171
- <OIcon
172
- url={optimizeImage(order.business?.logo, 'h_300,c_limit')}
173
- style={styles.logo}
174
- />
175
- </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
+ </>
176
239
  )}
177
240
  <CardInfoWrapper>
178
241
  <ContentHeader>
179
- <View style={{ flex: 1 }}>
180
- <OText size={12} lineHeight={18} weight={'600'} numberOfLines={1} ellipsizeMode={'tail'}>
181
- {order.business?.name}
182
- </OText>
183
- </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
+ )}
184
249
  {!!!pastOrders && (
185
250
  <>
186
251
  {isMessageView ? (
@@ -204,7 +269,8 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
204
269
  )}
205
270
  {!!pastOrders && (
206
271
  <ButtonWrapper>
207
- {allowedOrderStatus.includes(parseInt(order?.status)) &&
272
+ {!hideReviewOrderButton &&
273
+ allowedOrderStatus.includes(parseInt(order?.status)) &&
208
274
  !order.review && (
209
275
  <TouchableOpacity
210
276
  onPress={() => handleClickOrderReview(order)}
@@ -214,7 +280,7 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
214
280
  </OText>
215
281
  </TouchableOpacity>
216
282
  )}
217
- {order.cart && (
283
+ {order.cart && !hideReorderButton && (
218
284
  <OButton
219
285
  text={t('REORDER', 'Reorder')}
220
286
  imgRightSrc={''}
@@ -234,7 +300,7 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
234
300
  <ContentFooter>
235
301
  <View style={{ flex: 1 }}>
236
302
  <View style={styles.infoText}>
237
- {!!!pastOrders && (
303
+ {(!!!pastOrders || order?.business?.length > 1) && !hideOrderNumber && (
238
304
  <>
239
305
  <OText
240
306
  size={10}
@@ -244,7 +310,7 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
244
310
  lineHeight={15}
245
311
  numberOfLines={1}
246
312
  >
247
- {t('ORDER_NO', 'Order No') + '.'}
313
+ {order?.business?.length > 1 ? order?.business?.length : (t('ORDER_NO', 'Order No') + '.')}
248
314
  </OText>
249
315
  <OText
250
316
  size={10}
@@ -253,41 +319,50 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
253
319
  lineHeight={15}
254
320
  numberOfLines={1}
255
321
  >
256
- {order.id + ` \u2022 `}
322
+ {order?.business?.length > 1 ? t('ORDERS', 'orders') + ' \u2022 ' : order.id + ` \u2022 `}
257
323
  </OText>
258
324
  </>
259
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 && (
260
342
  <OText
343
+ color={theme.colors.primary}
261
344
  size={10}
262
345
  lineHeight={15}
263
- color={theme.colors.textSecondary}
264
- style={{ marginVertical: 3 }}
265
346
  numberOfLines={1}>
266
- {order?.delivery_datetime_utc ? parseDate(order?.delivery_datetime_utc) : parseDate(order?.delivery_datetime, { utc: false })}
347
+ {getOrderStatus(order.status)?.value}
267
348
  </OText>
268
- </View>
269
- <OText
270
- color={theme.colors.primary}
271
- size={10}
272
- lineHeight={15}
273
- numberOfLines={1}>
274
- {getOrderStatus(order.status)?.value}
275
- </OText>
349
+ )}
276
350
  </View>
277
- <TouchableOpacity
278
- onPress={handleChangeFavorite}
279
- style={{ marginTop: 5 }}
280
- >
281
- <IconAntDesign
282
- name={order?.favorite ? 'heart' : 'hearto'}
283
- color={theme.colors.danger5}
284
- size={16}
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}
285
360
  />
286
- </TouchableOpacity>
361
+ )}
287
362
  </ContentFooter>
288
363
  </CardInfoWrapper>
289
364
  </InnerContainer>
290
- </Container>
365
+ </CardAnimation>
291
366
  <OAlert
292
367
  open={confirm.open}
293
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
+ `