ordering-ui-react-native 0.17.26 → 0.17.27-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 (210) hide show
  1. package/package.json +8 -7
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/BusinessesListing/index.tsx +1 -1
  4. package/src/components/OrderCreating/index.tsx +1 -21
  5. package/src/components/PaymentOptionsWebView/index.tsx +119 -120
  6. package/src/components/StripeMethodForm/index.tsx +108 -79
  7. package/src/components/VerifyPhone/styles.tsx +1 -2
  8. package/src/components/shared/OToast.tsx +4 -4
  9. package/src/types/index.tsx +5 -0
  10. package/src/utils/index.tsx +7 -1
  11. package/themes/business/index.tsx +2 -0
  12. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +265 -240
  13. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +6 -4
  14. package/themes/business/src/components/BusinessController/index.tsx +0 -1
  15. package/themes/business/src/components/Chat/index.tsx +118 -107
  16. package/themes/business/src/components/DriverMap/index.tsx +17 -6
  17. package/themes/business/src/components/GoogleMap/index.tsx +58 -57
  18. package/themes/business/src/components/LoginForm/Otp/index.tsx +120 -0
  19. package/themes/business/src/components/LoginForm/Otp/styles.tsx +7 -0
  20. package/themes/business/src/components/LoginForm/index.tsx +238 -80
  21. package/themes/business/src/components/LoginForm/styles.tsx +10 -0
  22. package/themes/business/src/components/MapView/index.tsx +10 -10
  23. package/themes/business/src/components/NewOrderNotification/index.tsx +43 -50
  24. package/themes/business/src/components/OrderDetails/Delivery.tsx +4 -3
  25. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +90 -47
  26. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +59 -62
  27. package/themes/business/src/components/OrderDetailsLogistic/index.tsx +195 -0
  28. package/themes/business/src/components/OrderDetailsLogistic/styles.tsx +5 -0
  29. package/themes/business/src/components/OrderMessage/index.tsx +18 -17
  30. package/themes/business/src/components/OrderSummary/index.tsx +113 -121
  31. package/themes/business/src/components/OrdersOption/index.tsx +32 -75
  32. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +250 -0
  33. package/themes/business/src/components/PreviousOrders/OrdersGroupedItem.tsx +115 -0
  34. package/themes/business/src/components/PreviousOrders/index.tsx +445 -243
  35. package/themes/business/src/components/PreviousOrders/styles.tsx +31 -3
  36. package/themes/business/src/components/ProductItemAccordion/index.tsx +27 -3
  37. package/themes/business/src/components/ReviewCustomer/index.tsx +41 -24
  38. package/themes/business/src/components/StoresList/index.tsx +2 -2
  39. package/themes/business/src/components/shared/OLink.tsx +33 -13
  40. package/themes/business/src/components/shared/OModal.tsx +16 -9
  41. package/themes/business/src/components/shared/OText.tsx +8 -2
  42. package/themes/business/src/types/index.tsx +32 -2
  43. package/themes/business/src/utils/index.tsx +44 -1
  44. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  45. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  46. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  47. package/themes/kiosk/src/components/BusinessesListing/index.tsx +2 -1
  48. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  49. package/themes/kiosk/src/components/LoginForm/Otp/index.tsx +92 -0
  50. package/themes/kiosk/src/components/LoginForm/Otp/styles.tsx +7 -0
  51. package/themes/kiosk/src/components/LoginForm/index.tsx +473 -151
  52. package/themes/kiosk/src/components/LoginForm/styles.tsx +14 -1
  53. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  54. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  55. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  56. package/themes/kiosk/src/components/PhoneInputNumber/index.tsx +3 -2
  57. package/themes/kiosk/src/components/PhoneInputNumber/styles.tsx +1 -3
  58. package/themes/kiosk/src/components/ProductForm/index.tsx +1 -14
  59. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  60. package/themes/kiosk/src/components/shared/OModal.tsx +14 -11
  61. package/themes/kiosk/src/layouts/Container.tsx +7 -1
  62. package/themes/kiosk/src/types/index.d.ts +13 -0
  63. package/themes/kiosk/src/utils/index.tsx +15 -0
  64. package/themes/original/index.tsx +6 -0
  65. package/themes/original/src/components/AddressDetails/index.tsx +29 -11
  66. package/themes/original/src/components/AddressForm/index.tsx +53 -19
  67. package/themes/original/src/components/AddressList/index.tsx +26 -21
  68. package/themes/original/src/components/AddressList/styles.tsx +4 -2
  69. package/themes/original/src/components/AnalyticsSegment/index.tsx +193 -10
  70. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  71. package/themes/original/src/components/BusinessBasicInformation/index.tsx +166 -89
  72. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +9 -7
  73. package/themes/original/src/components/BusinessController/index.tsx +145 -68
  74. package/themes/original/src/components/BusinessController/styles.tsx +22 -9
  75. package/themes/original/src/components/BusinessFeaturedController/index.tsx +21 -54
  76. package/themes/original/src/components/BusinessFeaturedController/styles.tsx +8 -0
  77. package/themes/original/src/components/BusinessInformation/index.tsx +10 -31
  78. package/themes/original/src/components/BusinessItemAccordion/index.tsx +23 -22
  79. package/themes/original/src/components/BusinessListingSearch/index.tsx +350 -323
  80. package/themes/original/src/components/BusinessPreorder/index.tsx +97 -16
  81. package/themes/original/src/components/BusinessProductsList/index.tsx +20 -11
  82. package/themes/original/src/components/BusinessProductsList/styles.tsx +8 -3
  83. package/themes/original/src/components/BusinessProductsListing/index.tsx +616 -495
  84. package/themes/original/src/components/BusinessProductsListing/styles.tsx +7 -9
  85. package/themes/original/src/components/BusinessReviews/index.tsx +3 -1
  86. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +1 -1
  87. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +105 -78
  88. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -9
  89. package/themes/original/src/components/BusinessesListing/index.tsx +0 -1
  90. package/themes/original/src/components/Cart/index.tsx +102 -69
  91. package/themes/original/src/components/CartContent/index.tsx +115 -19
  92. package/themes/original/src/components/CartContent/styles.tsx +15 -1
  93. package/themes/original/src/components/Checkout/index.tsx +323 -178
  94. package/themes/original/src/components/Checkout/styles.tsx +4 -2
  95. package/themes/original/src/components/CitiesControl/index.tsx +89 -0
  96. package/themes/original/src/components/CitiesControl/styles.tsx +17 -0
  97. package/themes/original/src/components/CouponControl/index.tsx +10 -3
  98. package/themes/original/src/components/DriverTips/index.tsx +52 -34
  99. package/themes/original/src/components/Favorite/index.tsx +7 -4
  100. package/themes/original/src/components/Favorite/styles.tsx +1 -1
  101. package/themes/original/src/components/FavoriteList/index.tsx +51 -80
  102. package/themes/original/src/components/FloatingButton/index.tsx +1 -2
  103. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  104. package/themes/original/src/components/GPSButton/index.tsx +6 -4
  105. package/themes/original/src/components/GPSButton/styles.ts +3 -3
  106. package/themes/original/src/components/GiftCard/GiftCardUI/index.tsx +96 -0
  107. package/themes/original/src/components/GiftCard/GiftCardUI/styles.tsx +5 -0
  108. package/themes/original/src/components/GiftCard/PurchaseGiftCard/index.tsx +100 -0
  109. package/themes/original/src/components/GiftCard/PurchaseGiftCard/styles.tsx +8 -0
  110. package/themes/original/src/components/GiftCard/RedeemGiftCard/index.tsx +191 -0
  111. package/themes/original/src/components/GiftCard/RedeemGiftCard/styles.tsx +8 -0
  112. package/themes/original/src/components/GiftCard/SendGiftCard/index.tsx +165 -0
  113. package/themes/original/src/components/GiftCard/SendGiftCard/styles.tsx +9 -0
  114. package/themes/original/src/components/GoogleMap/index.tsx +15 -4
  115. package/themes/original/src/components/Help/index.tsx +8 -8
  116. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +11 -22
  117. package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +6 -0
  118. package/themes/original/src/components/HelpGuide/index.tsx +12 -16
  119. package/themes/original/src/components/HelpGuide/styles.tsx +6 -0
  120. package/themes/original/src/components/HelpOrder/index.tsx +12 -25
  121. package/themes/original/src/components/HelpOrder/styles.tsx +8 -1
  122. package/themes/original/src/components/Home/index.tsx +13 -4
  123. package/themes/original/src/components/LastOrder/index.tsx +1 -34
  124. package/themes/original/src/components/LoginForm/Otp/index.tsx +89 -73
  125. package/themes/original/src/components/LoginForm/Otp/styles.tsx +0 -1
  126. package/themes/original/src/components/LoginForm/index.tsx +59 -22
  127. package/themes/original/src/components/LottieAnimation/index.tsx +78 -0
  128. package/themes/original/src/components/MessageListing/index.tsx +16 -42
  129. package/themes/original/src/components/Messages/index.tsx +32 -10
  130. package/themes/original/src/components/MomentOption/index.tsx +195 -88
  131. package/themes/original/src/components/MultiCart/index.tsx +50 -0
  132. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +197 -116
  133. package/themes/original/src/components/MultiCheckout/index.tsx +288 -86
  134. package/themes/original/src/components/MultiOrdersDetails/SingleOrderCard.tsx +37 -224
  135. package/themes/original/src/components/MultiOrdersDetails/index.tsx +67 -20
  136. package/themes/original/src/components/MultiOrdersDetails/styles.tsx +1 -1
  137. package/themes/original/src/components/MyOrders/index.tsx +55 -51
  138. package/themes/original/src/components/NavBar/index.tsx +6 -11
  139. package/themes/original/src/components/Notifications/index.tsx +46 -50
  140. package/themes/original/src/components/Notifications/styles.tsx +6 -3
  141. package/themes/original/src/components/OrderDetails/OrderEta.tsx +64 -0
  142. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +15 -3
  143. package/themes/original/src/components/OrderDetails/index.tsx +199 -359
  144. package/themes/original/src/components/OrderDetails/styles.tsx +0 -1
  145. package/themes/original/src/components/OrderItAgain/index.tsx +3 -1
  146. package/themes/original/src/components/OrderProgress/index.tsx +74 -112
  147. package/themes/original/src/components/OrderProgress/styles.tsx +5 -0
  148. package/themes/original/src/components/OrderSummary/index.tsx +87 -59
  149. package/themes/original/src/components/OrderTypeSelector/index.tsx +3 -2
  150. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +24 -19
  151. package/themes/original/src/components/OrdersOption/index.tsx +96 -88
  152. package/themes/original/src/components/PageBanner/index.tsx +171 -0
  153. package/themes/original/src/components/PageBanner/styles.tsx +11 -0
  154. package/themes/original/src/components/PaymentOptionStripe/styles.tsx +1 -1
  155. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  156. package/themes/original/src/components/PaymentOptions/index.tsx +34 -6
  157. package/themes/original/src/components/PhoneInputNumber/index.tsx +3 -3
  158. package/themes/original/src/components/PlaceSpot/index.tsx +12 -6
  159. package/themes/original/src/components/PreviousOrders/index.tsx +3 -2
  160. package/themes/original/src/components/ProductForm/index.tsx +230 -261
  161. package/themes/original/src/components/ProductForm/styles.tsx +4 -7
  162. package/themes/original/src/components/ProductItemAccordion/index.tsx +59 -29
  163. package/themes/original/src/components/ProductOptionSubOption/index.tsx +18 -10
  164. package/themes/original/src/components/ProductOptionSubOption/styles.tsx +1 -2
  165. package/themes/original/src/components/ProfessionalFilter/SingleProfessionalCard/index.tsx +108 -0
  166. package/themes/original/src/components/ProfessionalFilter/index.tsx +20 -50
  167. package/themes/original/src/components/ProfessionalProfile/index.tsx +36 -7
  168. package/themes/original/src/components/Promotions/index.tsx +234 -220
  169. package/themes/original/src/components/Promotions/styles.tsx +10 -3
  170. package/themes/original/src/components/ReviewDriver/index.tsx +3 -3
  171. package/themes/original/src/components/ReviewOrder/index.tsx +26 -9
  172. package/themes/original/src/components/ReviewOrder/styles.tsx +7 -0
  173. package/themes/original/src/components/ReviewProducts/index.tsx +23 -11
  174. package/themes/original/src/components/ReviewTrigger/index.tsx +27 -9
  175. package/themes/original/src/components/ReviewTrigger/styles.tsx +8 -1
  176. package/themes/original/src/components/ScheduleAccordion/index.tsx +68 -0
  177. package/themes/original/src/components/ScheduleAccordion/styles.tsx +14 -0
  178. package/themes/original/src/components/ServiceForm/index.tsx +74 -19
  179. package/themes/original/src/components/Sessions/index.tsx +11 -8
  180. package/themes/original/src/components/Sessions/styles.tsx +5 -0
  181. package/themes/original/src/components/SignupForm/index.tsx +82 -67
  182. package/themes/original/src/components/SingleOrderCard/index.tsx +149 -63
  183. package/themes/original/src/components/SingleOrderCard/styles.tsx +11 -9
  184. package/themes/original/src/components/SingleProductCard/index.tsx +99 -55
  185. package/themes/original/src/components/SingleProductCard/styles.tsx +27 -13
  186. package/themes/original/src/components/SingleProductReview/index.tsx +8 -2
  187. package/themes/original/src/components/SingleProductReview/styles.tsx +1 -1
  188. package/themes/original/src/components/StripeCardsList/index.tsx +9 -2
  189. package/themes/original/src/components/StripeElementsForm/index.tsx +28 -15
  190. package/themes/original/src/components/UpsellingProducts/index.tsx +238 -224
  191. package/themes/original/src/components/UpsellingProducts/styles.tsx +12 -1
  192. package/themes/original/src/components/UserDetails/index.tsx +8 -4
  193. package/themes/original/src/components/UserFormDetails/index.tsx +47 -7
  194. package/themes/original/src/components/UserProfile/index.tsx +9 -14
  195. package/themes/original/src/components/UserProfileForm/index.tsx +21 -28
  196. package/themes/original/src/components/UserProfileForm/styles.tsx +7 -0
  197. package/themes/original/src/components/WalletTransactionItem/index.tsx +2 -2
  198. package/themes/original/src/components/Wallets/index.tsx +97 -33
  199. package/themes/original/src/components/Wallets/styles.tsx +2 -0
  200. package/themes/original/src/components/shared/CardAnimation.tsx +47 -0
  201. package/themes/original/src/components/shared/HeaderTitle.tsx +8 -3
  202. package/themes/original/src/components/shared/OBottomPopup.tsx +1 -1
  203. package/themes/original/src/components/shared/OButton.tsx +6 -2
  204. package/themes/original/src/components/shared/OIcon.tsx +8 -1
  205. package/themes/original/src/components/shared/OInput.tsx +16 -2
  206. package/themes/original/src/components/shared/OModal.tsx +3 -3
  207. package/themes/original/src/layouts/Container.tsx +13 -9
  208. package/themes/original/src/types/index.tsx +36 -9
  209. package/themes/original/src/utils/index.tsx +375 -58
  210. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -37,7 +37,7 @@ import Alert from '../../../../../src/providers/AlertProvider'
37
37
  import { OText, OButton, OInput } from '../shared';
38
38
  import { OModal } from '../../../../../src/components/shared';
39
39
  import { SignupParams } from '../../types';
40
- import { sortInputFields } from '../../utils';
40
+ import { sortInputFields, vibrateApp } from '../../utils';
41
41
  import { GoogleLogin } from '../GoogleLogin';
42
42
  import { AppleLogin } from '../AppleLogin';
43
43
 
@@ -83,7 +83,8 @@ const SignupFormUI = (props: SignupParams) => {
83
83
  signUpTab,
84
84
  useSignUpFullDetails,
85
85
  useSignUpOtpEmail,
86
- useSignUpOtpCellphone
86
+ useSignUpOtpCellphone,
87
+ isGuest
87
88
  } = props;
88
89
 
89
90
  const theme = useTheme();
@@ -245,6 +246,7 @@ const SignupFormUI = (props: SignupParams) => {
245
246
  const onSubmit = (values?: any) => {
246
247
  if (phoneInputData.error && signUpTab !== 'otpEmail') {
247
248
  showToast(ToastType.Error, phoneInputData.error);
249
+ vibrateApp()
248
250
  return;
249
251
  }
250
252
  if (
@@ -262,6 +264,7 @@ const SignupFormUI = (props: SignupParams) => {
262
264
  'The field Mobile phone is required.',
263
265
  ),
264
266
  );
267
+ vibrateApp()
265
268
  return;
266
269
  }
267
270
  if (signUpTab === 'otpEmail' || signUpTab === 'otpCellphone') {
@@ -320,7 +323,7 @@ const SignupFormUI = (props: SignupParams) => {
320
323
  };
321
324
 
322
325
  const handleChangeInputEmail = (value: string, onChange: any) => {
323
- onChange(value.toLowerCase().replace(/[&,()%";:ç?<>{}\\[\]\s]/g, ''));
326
+ onChange(value.toLowerCase().trim().replace(/[&,()%";:ç?<>{}\\[\]\s]/g, ''));
324
327
  };
325
328
 
326
329
  const handleOpenTermsUrl = async (url: any) => {
@@ -330,6 +333,7 @@ const SignupFormUI = (props: SignupParams) => {
330
333
  await Linking.openURL(url);
331
334
  } else {
332
335
  showToast(ToastType.Error, t('VALIDATION_ERROR_ACTIVE_URL', 'The _attribute_ is not a valid URL.').replace('_attribute_', t('URL', 'URL')))
336
+ vibrateApp()
333
337
  }
334
338
  }
335
339
 
@@ -337,10 +341,12 @@ const SignupFormUI = (props: SignupParams) => {
337
341
  setRecaptchaVerified(false)
338
342
  if (!recaptchaConfig?.siteKey) {
339
343
  showToast(ToastType.Error, t('NO_RECAPTCHA_SITE_KEY', 'The config doesn\'t have recaptcha site key'));
344
+ vibrateApp()
340
345
  return
341
346
  }
342
347
  if (!recaptchaConfig?.baseUrl) {
343
348
  showToast(ToastType.Error, t('NO_RECAPTCHA_BASE_URL', 'The config doesn\'t have recaptcha base url'));
349
+ vibrateApp()
344
350
  return
345
351
  }
346
352
  recaptchaRef.current.open()
@@ -384,10 +390,13 @@ const SignupFormUI = (props: SignupParams) => {
384
390
  baseUrl: configs?.security_recaptcha_base_url?.value || null
385
391
  })
386
392
  showToast(ToastType.Info, t('TRY_AGAIN', 'Please try again'))
393
+ vibrateApp()
387
394
  return
388
395
  }
389
- formState.result?.result &&
390
- showToast(ToastType.Error, formState.result?.result[0]);
396
+ formState.result?.result && formState.result?.result[0]?.includes("_") ?
397
+ showToast(ToastType.Error, t(`${formState.result?.result[0]}`, 'Phone number already used')) :
398
+ showToast(ToastType.Error, formState.result?.result[0])
399
+ formState.result?.result && vibrateApp()
391
400
  setIsLoadingVerifyModal(false);
392
401
  }
393
402
  }, [formState]);
@@ -395,6 +404,7 @@ const SignupFormUI = (props: SignupParams) => {
395
404
  useEffect(() => {
396
405
  if (Object.keys(errors).length > 0) {
397
406
  setIsLoadingVerifyModal(false);
407
+ vibrateApp()
398
408
  }
399
409
  }, [errors])
400
410
 
@@ -423,6 +433,7 @@ const SignupFormUI = (props: SignupParams) => {
423
433
  ? verifyPhoneState?.result?.result
424
434
  : verifyPhoneState?.result?.result[0];
425
435
  verifyPhoneState.result?.result && showToast(ToastType.Error, message);
436
+ verifyPhoneState.result?.result && vibrateApp()
426
437
  setIsLoadingVerifyModal(false);
427
438
  return;
428
439
  }
@@ -457,16 +468,19 @@ const SignupFormUI = (props: SignupParams) => {
457
468
 
458
469
  return (
459
470
  <View>
460
- <NavBar
461
- title={t('SIGNUP', 'Signup')}
462
- titleAlign={'center'}
463
- onActionLeft={() => navigation?.canGoBack() && navigation.goBack()}
464
- showCall={false}
465
- btnStyle={{ paddingLeft: 0 }}
466
- style={{ flexDirection: 'column', alignItems: 'flex-start' }}
467
- titleWrapStyle={{ paddingHorizontal: 0 }}
468
- titleStyle={{ marginLeft: 0, marginRight: 0 }}
469
- />
471
+ {isGuest ? (
472
+ <OText style={{ textAlign: 'center', marginBottom: 10 }} size={18}>{t('SIGNUP', 'Signup')}</OText>
473
+ ) : (
474
+ <NavBar
475
+ title={t('SIGNUP', 'Signup')}
476
+ titleAlign={'center'}
477
+ onActionLeft={() => navigation?.canGoBack() && navigation.goBack()}
478
+ showCall={false}
479
+ btnStyle={{ paddingLeft: 0 }}
480
+ titleWrapStyle={{ paddingHorizontal: 0 }}
481
+ titleStyle={{ marginLeft: 0, marginRight: 0 }}
482
+ />
483
+ )}
470
484
  <FormSide>
471
485
  {((Number(useSignUpFullDetails) + Number(useSignUpOtpEmail) + Number(useSignUpOtpCellphone)) > 1) && (
472
486
  <SignupWith>
@@ -579,7 +593,7 @@ const SignupFormUI = (props: SignupParams) => {
579
593
  control={control}
580
594
  render={({ onChange, value }: any) => (
581
595
  <OInput
582
- placeholder={t(field.name)}
596
+ placeholder={t(field.name?.replace(/\s/g, '_')?.toUpperCase(), field.name)}
583
597
  style={style.inputStyle}
584
598
  icon={
585
599
  field.code === 'email'
@@ -886,64 +900,65 @@ const SignupFormUI = (props: SignupParams) => {
886
900
  </View>
887
901
  )
888
902
  }
889
- <View
890
- style={{
891
- flexDirection: 'row',
892
- width: '100%',
893
- justifyContent: 'space-between',
894
- alignItems: 'center',
895
- marginVertical: 30,
896
- }}>
897
- <View style={style.line} />
898
- <OText
899
- size={14}
900
- mBottom={10}
901
- style={{ paddingHorizontal: 19 }}
902
- color={theme.colors.disabled}>
903
- {t('OR', 'or')}
904
- </OText>
905
- <View style={style.line} />
906
- </View>
907
-
908
- {configs && Object.keys(configs).length > 0 && (
909
- (((configs?.facebook_login?.value === 'true' || configs?.facebook_login?.value === '1') && configs?.facebook_id?.value) ||
910
- (configs?.google_login_client_id?.value !== '' && configs?.google_login_client_id?.value !== null)) &&
903
+ {configs && Object.keys(configs).length > 0 && !isGuest && (
904
+ (((configs?.facebook_login?.value === 'true' || configs?.facebook_login?.value === '1') && configs?.facebook_id?.value && facebookLoginEnabled) ||
905
+ ((configs?.google_login_client_id?.value !== '' && configs?.google_login_client_id?.value !== null) && googleLoginEnabled) ||
906
+ ((configs?.apple_login_client_id?.value !== '' && configs?.apple_login_client_id?.value !== null) && appleLoginEnabled)) &&
911
907
  (
912
- <ButtonsWrapper>
913
- <SocialButtons>
914
- {(configs?.facebook_login?.value === 'true' || configs?.facebook_login?.value === '1') &&
915
- configs?.facebook_id?.value &&
916
- facebookLoginEnabled &&
917
- (
918
- <FacebookLogin
908
+ <>
909
+ <View
910
+ style={{
911
+ flexDirection: 'row',
912
+ width: '100%',
913
+ justifyContent: 'space-between',
914
+ alignItems: 'center',
915
+ marginVertical: 30,
916
+ }}>
917
+ <View style={style.line} />
918
+ <OText
919
+ size={14}
920
+ mBottom={10}
921
+ style={{ paddingHorizontal: 19 }}
922
+ color={theme.colors.disabled}>
923
+ {t('OR', 'or')}
924
+ </OText>
925
+ <View style={style.line} />
926
+ </View>
927
+ <ButtonsWrapper>
928
+ <SocialButtons>
929
+ {(configs?.facebook_login?.value === 'true' || configs?.facebook_login?.value === '1') &&
930
+ configs?.facebook_id?.value &&
931
+ facebookLoginEnabled &&
932
+ (
933
+ <FacebookLogin
934
+ notificationState={notificationState}
935
+ handleErrors={(err: any) => { showToast(ToastType.Error, err), vibrateApp() }}
936
+ handleLoading={(val: boolean) => setIsFBLoading(val)}
937
+ handleSuccessFacebookLogin={handleSuccessFacebook}
938
+ />
939
+ )}
940
+ {(configs?.google_login_client_id?.value !== '' && configs?.google_login_client_id?.value !== null) && googleLoginEnabled && (
941
+ <GoogleLogin
919
942
  notificationState={notificationState}
920
- handleErrors={(err: any) => showToast(ToastType.Error, err)}
943
+ webClientId={configs?.google_login_client_id?.value}
944
+ handleErrors={(err: any) => { showToast(ToastType.Error, err), vibrateApp() }}
921
945
  handleLoading={(val: boolean) => setIsFBLoading(val)}
922
- handleSuccessFacebookLogin={handleSuccessFacebook}
946
+ handleSuccessGoogleLogin={handleSuccessFacebook}
923
947
  />
924
948
  )}
925
- {(configs?.google_login_client_id?.value !== '' && configs?.google_login_client_id?.value !== null) && googleLoginEnabled && (
926
- <GoogleLogin
927
- notificationState={notificationState}
928
- webClientId={configs?.google_login_client_id?.value}
929
- handleErrors={(err: any) => showToast(ToastType.Error, err)}
930
- handleLoading={(val: boolean) => setIsFBLoading(val)}
931
- handleSuccessGoogleLogin={handleSuccessFacebook}
932
- />
933
- )}
934
- {(configs?.apple_login_client_id?.value !== '' && configs?.apple_login_client_id?.value !== null) && appleLoginEnabled && (
935
- <AppleLogin
936
- notificationState={notificationState}
937
- handleErrors={(err: any) => showToast(ToastType.Error, err)}
938
- handleLoading={(val: boolean) => setIsFBLoading(val)}
939
- handleSuccessAppleLogin={handleSuccessFacebook}
940
- />
941
- )}
942
- </SocialButtons>
943
- </ButtonsWrapper>
949
+ {(configs?.apple_login_client_id?.value !== '' && configs?.apple_login_client_id?.value !== null) && appleLoginEnabled && (
950
+ <AppleLogin
951
+ notificationState={notificationState}
952
+ handleErrors={(err: any) => { showToast(ToastType.Error, err), vibrateApp() }}
953
+ handleLoading={(val: boolean) => setIsFBLoading(val)}
954
+ handleSuccessAppleLogin={handleSuccessFacebook}
955
+ />
956
+ )}
957
+ </SocialButtons>
958
+ </ButtonsWrapper>
959
+ </>
944
960
  )
945
961
  )}
946
-
947
962
  </FormSide>
948
963
  <OModal
949
964
  open={willVerifyOtpState}
@@ -5,15 +5,14 @@ import {
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
- import IconAntDesign from 'react-native-vector-icons/AntDesign'
12
12
  import { SingleOrderCardParams } from '../../types';
13
13
  import { OAlert } from '../../../../../src/components/shared'
14
-
14
+ import { OrderEta } from '../OrderDetails/OrderEta'
15
15
  import {
16
- Container,
17
16
  InnerContainer,
18
17
  Logo,
19
18
  CardInfoWrapper,
@@ -21,8 +20,11 @@ import {
21
20
  ButtonWrapper,
22
21
  ContentFooter,
23
22
  UnreadMessageCounter,
24
- Price
23
+ Price,
24
+ MultiLogosContainer
25
25
  } from './styles';
26
+ import { LottieAnimation } from '../LottieAnimation';
27
+ import { CardAnimation } from '../shared/CardAnimation';
26
28
 
27
29
  const SingleOrderCardUI = (props: SingleOrderCardParams) => {
28
30
  const {
@@ -44,17 +46,28 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
44
46
  const [{ carts }] = useOrder()
45
47
  const theme = useTheme();
46
48
 
47
- const [reorderSelected, setReorderSelected] = useState<number | null>(null);
49
+ let [reorderSelected, setReorderSelected] = useState<number | null>(null);
48
50
  const [confirm, setConfirm] = useState<any>({ open: false, content: null, handleOnAccept: null, id: null, title: null })
51
+ const [isPressed, setIsPressed] = useState(false)
49
52
 
50
- const allowedOrderStatus = [1, 2, 5, 6, 10, 11, 12];
53
+ const allowedOrderStatus = [1, 2, 5, 6, 10, 11, 12, 15];
51
54
 
52
55
  const styles = StyleSheet.create({
56
+ container: {
57
+ borderRadius: 7.6,
58
+ marginBottom: 10,
59
+ paddingVertical: 5,
60
+ },
53
61
  logo: {
54
62
  borderRadius: 8,
55
63
  width: 64,
56
64
  height: 64
57
65
  },
66
+ minilogo: {
67
+ borderRadius: 8,
68
+ width: 40,
69
+ height: 40
70
+ },
58
71
  logoWrapper: {
59
72
  overflow: 'hidden',
60
73
  backgroundColor: 'white',
@@ -72,9 +85,13 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
72
85
  marginRight: 2,
73
86
  },
74
87
  reorderLoading: {
75
- width: 80,
76
- height: 40,
77
- borderRadius: 10,
88
+ height: 23,
89
+ paddingLeft: 20,
90
+ paddingRight: 20,
91
+ borderRadius: 23,
92
+ shadowOpacity: 0,
93
+ backgroundColor: theme.colors.primary,
94
+ borderWidth: 0,
78
95
  },
79
96
  reorderbutton: {
80
97
  height: 23,
@@ -100,23 +117,41 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
100
117
  infoText: {
101
118
  flexDirection: 'row',
102
119
  alignItems: 'center'
120
+ },
121
+ cardAnimation: {
122
+ elevation: isPressed ? 2 : 0,
123
+ shadowColor: '#888',
124
+ shadowOffset: { width: 0, height: isPressed ? 2 : 0 },
125
+ shadowRadius: 18,
126
+ shadowOpacity: isPressed ? 0.8 : 0,
127
+ borderRadius: 12,
103
128
  }
104
129
  });
105
130
 
106
131
  const handleReorderClick = (order: any) => {
107
- if (carts[`businessId:${order?.business_id}`] && carts[`businessId:${order?.business_id}`]?.products?.length > 0) {
132
+ setReorderSelected(null)
133
+ reorderSelected = null
134
+ const isMultiOrders = Array.isArray(order?.id)
135
+
136
+ const isRemoveCart = isMultiOrders
137
+ ? order?.business_id?.some((businessId: any) => !!carts[`businessId:${businessId}`]?.uuid)
138
+ : carts[`businessId:${order?.business_id}`] && !!carts[`businessId:${order?.business_id}`]?.uuid
139
+
140
+ if (isRemoveCart) {
108
141
  setConfirm({
109
142
  open: true,
110
143
  content: [t('QUESTION_DELETE_PRODUCTS_FROM_CART', 'Are you sure that you want to delete all products from cart?')],
111
144
  title: t('ORDER', 'Order'),
112
145
  handleOnAccept: async () => {
113
- handleRemoveCart()
146
+ handleRemoveCart(order)
114
147
  setConfirm({ ...confirm, open: false })
115
148
  }
116
149
  })
117
150
  } else {
118
- setReorderSelected(order?.id);
119
- handleReorder && handleReorder(order?.id);
151
+ const orderId = Array.isArray(order?.id) ? order?.id[0] : order?.id
152
+ setReorderSelected(orderId)
153
+ reorderSelected = orderId
154
+ handleReorder && handleReorder(order?.id)
120
155
  }
121
156
  };
122
157
 
@@ -127,11 +162,12 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
127
162
  order: {
128
163
  id: order?.id,
129
164
  business_id: order?.business_id,
130
- logo: order?.business?.logo,
165
+ logo: order?.business?.length > 1 ? order?.business?.map?.((business: any) => business?.logo) : order?.business?.logo,
131
166
  driver: order?.driver,
132
167
  products: order?.products,
133
168
  review: order?.review,
134
- user_review: order?.user_review
169
+ user_review: order?.user_review,
170
+ business: order?.business
135
171
  },
136
172
  });
137
173
  return
@@ -144,13 +180,16 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
144
180
  onNavigationRedirect('OrderDetails', { orderId: order?.uuid });
145
181
  };
146
182
 
147
- const handleClickViewOrder = (uuid: string) => {
183
+ const handleClickViewOrder = (order: any) => {
148
184
  if (isMessageView) {
149
185
  handleClickOrder(order?.uuid)
150
186
  return
151
187
  }
152
- onNavigationRedirect &&
153
- onNavigationRedirect('OrderDetails', { orderId: uuid });
188
+ if (order?.cart_group_id) {
189
+ onNavigationRedirect?.('MultiOrdersDetails', { orderId: order?.cart_group_id });
190
+ } else {
191
+ onNavigationRedirect?.('OrderDetails', { orderId: order?.uuid });
192
+ }
154
193
  };
155
194
 
156
195
  const handleChangeFavorite = () => {
@@ -159,32 +198,71 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
159
198
 
160
199
  const handleOriginalReorder = () => {
161
200
  setConfirm({ ...confirm, open: false, title: null })
162
- setReorderSelected(order?.id);
163
- handleReorder && handleReorder(order?.id);
164
201
  }
165
202
 
203
+ const hideBusinessLogo = theme?.orders?.components?.business_logo?.hidden
204
+ const hideDate = theme?.orders?.components?.date?.hidden
205
+ const hideBusinessName = theme?.orders?.components?.business_name?.hidden
206
+ const hideOrderNumber = theme?.orders?.components?.order_number?.hidden
207
+ const hideReviewOrderButton = theme?.orders?.components?.review_order_button?.hidden
208
+ const hideReorderButton = theme?.orders?.components?.reorder_button?.hidden
209
+ const hideFavorite = theme?.orders?.components?.favorite?.hidden
210
+ const hideOrderStatus = theme?.orders?.components?.order_status?.hidden
211
+
166
212
  return (
167
213
  <>
168
- <Container
169
- onPress={() => handleClickViewOrder(order?.uuid)}
170
- activeOpacity={0.7}
214
+ <CardAnimation
215
+ onClick={() => handleClickViewOrder(order)}
216
+ style={[styles.container]}
171
217
  >
172
218
  <InnerContainer>
173
- {(!!order.business?.logo || theme?.images?.dummies?.businessLogo) && (
174
- <Logo style={styles.logoWrapper}>
175
- <OIcon
176
- url={optimizeImage(order.business?.logo || theme?.images?.dummies?.businessLogo, 'h_300,c_limit')}
177
- style={styles.logo}
178
- />
179
- </Logo>
219
+ {!hideBusinessLogo && (!!order.business?.logo || theme?.images?.dummies?.businessLogo) && (
220
+ <>
221
+ {order?.business?.length > 1 ? (
222
+ <MultiLogosContainer>
223
+ {order?.business?.map((business: any, i: number) => i < 2 && (
224
+ <Logo
225
+ isMulti
226
+ key={business?.id}
227
+ style={styles.logoWrapper}
228
+ >
229
+ <FastImage
230
+ style={styles.minilogo}
231
+ source={business?.logo ? {
232
+ uri: optimizeImage(business?.logo, 'h_300,c_limit'),
233
+ priority: FastImage.priority.normal,
234
+ } : theme?.images?.dummies?.businessLogo}
235
+ resizeMode={FastImage.resizeMode.contain}
236
+ />
237
+ </Logo>
238
+ ))}
239
+ {order?.business?.length > 1 && (order?.business?.length - 2) > 0 && (
240
+ <OText mRight={3}> + {order?.business?.length - 2}</OText>
241
+ )}
242
+ </MultiLogosContainer>
243
+ ) : (
244
+ <Logo style={styles.logoWrapper}>
245
+ <FastImage
246
+ style={styles.logo}
247
+ source={order.business?.logo ? {
248
+ uri: optimizeImage(order.business?.logo, 'h_300,c_limit'),
249
+ priority: FastImage.priority.normal,
250
+ } : theme?.images?.dummies?.businessLogo}
251
+ resizeMode={FastImage.resizeMode.contain}
252
+ />
253
+ </Logo>
254
+ )}
255
+ </>
180
256
  )}
181
257
  <CardInfoWrapper>
182
258
  <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>
259
+ {(order?.business?.length > 1 && !hideOrderNumber) || (!order?.business?.length && !hideBusinessName) && (
260
+ <View style={{ flex: 1 }}>
261
+ <OText size={12} lineHeight={18} weight={'600'} numberOfLines={1} ellipsizeMode={'tail'}>
262
+ {order?.business?.length > 1 ? `${t('GROUP_ORDER', 'Group Order')} ${t('No', 'No')}. ${order?.cart_group_id}` : order.business?.name}
263
+ </OText>
264
+ </View>
265
+ )}
188
266
  {!!!pastOrders && (
189
267
  <>
190
268
  {isMessageView ? (
@@ -208,7 +286,8 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
208
286
  )}
209
287
  {!!pastOrders && (
210
288
  <ButtonWrapper>
211
- {allowedOrderStatus.includes(parseInt(order?.status)) &&
289
+ {!hideReviewOrderButton &&
290
+ allowedOrderStatus.includes(parseInt(order?.status)) &&
212
291
  !order.review && (
213
292
  <TouchableOpacity
214
293
  onPress={() => handleClickOrderReview(order)}
@@ -218,7 +297,7 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
218
297
  </OText>
219
298
  </TouchableOpacity>
220
299
  )}
221
- {order.cart && (
300
+ {!hideReorderButton && typeof order?.id === 'number' && (
222
301
  <OButton
223
302
  text={t('REORDER', 'Reorder')}
224
303
  imgRightSrc={''}
@@ -238,7 +317,7 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
238
317
  <ContentFooter>
239
318
  <View style={{ flex: 1 }}>
240
319
  <View style={styles.infoText}>
241
- {!!!pastOrders && (
320
+ {(!!!pastOrders || order?.business?.length > 1) && !hideOrderNumber && (
242
321
  <>
243
322
  <OText
244
323
  size={10}
@@ -248,7 +327,7 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
248
327
  lineHeight={15}
249
328
  numberOfLines={1}
250
329
  >
251
- {t('ORDER_NO', 'Order No') + '.'}
330
+ {order?.business?.length > 1 ? order?.business?.length : (t('ORDER_NO', 'Order No') + '.')}
252
331
  </OText>
253
332
  <OText
254
333
  size={10}
@@ -257,43 +336,50 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
257
336
  lineHeight={15}
258
337
  numberOfLines={1}
259
338
  >
260
- {order.id + ` \u2022 `}
339
+ {order?.business?.length > 1 ? t('ORDERS', 'orders') + ' \u2022 ' : order.id + ` \u2022 `}
261
340
  </OText>
262
341
  </>
263
342
  )}
343
+ {!hideDate && (
344
+ <OText
345
+ size={10}
346
+ lineHeight={15}
347
+ color={theme.colors.textSecondary}
348
+ style={{ marginVertical: 3 }}
349
+ numberOfLines={1}>
350
+ {
351
+ pastOrders
352
+ ? order?.delivery_datetime_utc ? parseDate(order?.delivery_datetime_utc) : parseDate(order?.delivery_datetime, { utc: false })
353
+ : <OrderEta order={order} />
354
+ }
355
+ </OText>
356
+ )}
357
+ </View>
358
+ {!hideOrderStatus && (
264
359
  <OText
360
+ color={theme.colors.primary}
265
361
  size={10}
266
362
  lineHeight={15}
267
- color={theme.colors.textSecondary}
268
- style={{ marginVertical: 3 }}
269
363
  numberOfLines={1}>
270
- {order?.delivery_datetime_utc ? parseDate(order?.delivery_datetime_utc) : parseDate(order?.delivery_datetime, { utc: false })}
364
+ {getOrderStatus(order.status)?.value}
271
365
  </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>
366
+ )}
280
367
  </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>
368
+ {!isMessageView && !order?.business?.length && !hideFavorite && (
369
+ <LottieAnimation
370
+ type='favorite'
371
+ onClick={handleChangeFavorite}
372
+ initialValue={order?.favorite ? 0.75 : 0}
373
+ toValue={order?.favorite ? 0 : 0.75}
374
+ style={{ marginBottom: 5 }}
375
+ iconProps={{ color: theme.colors.danger5, size: 16, style: { top: 7 } }}
376
+ isActive={order?.favorite}
377
+ />
292
378
  )}
293
379
  </ContentFooter>
294
380
  </CardInfoWrapper>
295
381
  </InnerContainer>
296
- </Container>
382
+ </CardAnimation>
297
383
  <OAlert
298
384
  open={confirm.open}
299
385
  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`
@@ -23,7 +19,7 @@ export const CardInfoWrapper = styled.View`
23
19
 
24
20
  export const ContentHeader = styled.View`
25
21
  flex-direction: row;
26
- justify-content: space-between;
22
+ justify-content: flex-end;
27
23
  `
28
24
 
29
25
  export const ButtonWrapper = 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
+ `